3

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

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

这是为什么?

工具:Visual Studio 2012;视窗 8

代码:

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

1 回答 1

4

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

于 2013-03-10T00:46:02.370 回答