我在_cdecl调用约定中有一个vc ++ dll。我想从_stdcall调用约定中的代码中使用该dll的导出函数。我按预期得到链接器错误。但我怎么能这样做。
答案 0 :(得分:0)
如果没有stdcall DLL的源,可以动态加载并在函数指针上指定调用约定,否则使用项目设置。不要这样做:
BOOL (*pBeep)(UINT) = 0; // defaults to project calling convention setting (/Gd etc)
如果您的项目设置为默认的__cdecl,您实际上想要将函数指针显式设置为__stdcall:
BOOL (__stdcall *pBeep)(UINT) = 0;
确保在分配函数指针时也能正确投射:
pBeep = (BOOL (__stdcall *)(UINT))GetProcAddress(beepLibrary, "MessageBeep");