如何从_stdcall约定中的代码中调用_cdecl约定中的函数

时间:2014-03-20 05:24:58

标签: visual-c++

我在_cdecl调用约定中有一个vc ++ dll。我想从_stdcall调用约定中的代码中使用该dll的导出函数。我按预期得到链接器错误。但我怎么能这样做。

1 个答案:

答案 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");