added explicit cdecl calling convention