extern" C" dllexport产生奇怪的名字

时间:2013-03-10 00:28:19

标签: c++ visual-c++

我正在尝试用可以用rundll32.exe执行的方法编写库,但是我似乎无法强制生成正确的导出名称:

在32位配置上我得到DoStuff(x,x,x,x)
在64位配置上,我得到DoStuff

为什么?

工具:Visual Studio 2012; Windows 8

代码:

extern "C" __declspec(dllexport) void __stdcall DoStuff(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow)
{
    MessageBoxA(NULL, lpszCmdLine, "Cookies", 0);
}

1 个答案:

答案 0 :(得分:4)

我相信这是因为您在dllexport函数上使用stdcall。 x86上stdcall的约定是被调用者从堆栈中删除参数。因此,参数计数作为名称的一部分包含在内。在x64上,标准调用约定是寄存器传递,因此不包括参数信息。