我正在尝试用可以用我似乎无法强制生成正确的导出名称: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);
}
答案 0 :(得分:4)
我相信这是因为您在dllexport
函数上使用stdcall
。 x86上stdcall
的约定是被调用者从堆栈中删除参数。因此,参数计数作为名称的一部分包含在内。在x64上,标准调用约定是寄存器传递,因此不包括参数信息。