Extern "C" dllexport 产生奇怪的名字
extern "C" dllexport producing strange name
rundll32.exe
执行的方法编写库,但是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);
}
我认为发生这种情况是因为您在stdcall
函数上使用dllexport
。x86上stdcall
的约定是,被调用者从堆栈中删除参数。因此,参数计数作为名称的一部分包含在内。在x64上,标准调用约定是寄存器传递,因此不包括参数信息。
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 为什么在全局范围内使用"extern int a"似乎不行?
- 如何使用extern类
- 自动重复 extern "C"函数中的类构造函数采用的相同参数
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 使用说明符 extern 声明的C++中的标识符链接
- 可视化编译与 C++ 中的 Extern 变量
- 是否可以在不使用 decltype 的情况下推断先前定义的 extern 变量的类型
- 如何使用默认值将枚举声明为 extern
- 如何与 Cheerp/js 中的 extern 变量接口?
- 如何将 Python 字符串传递给 C++ (extern C) 函数
- 从 exe 和 dll 访问静态库中的 extern 变量
- "extern"声明以及带有和不带参数列表的类模板实例的后续定义
- 既然我们有内联变量,extern const 还有用吗?
- 在命名空间 c++ 中正确声明 extern 变量
- 尝试使用 extern "C" 调用 C 中的C++方法,得到"undefined reference to"对象的链接器错误
- Extern "C"错误在'int'之前'asm'或'__attribute__'
- 有什么方法可以在标头中定义和声明 extern 对象吗?
- ' __declspec(dllexport) extern std::string foo; '链接器未找到
- Extern "C" dllexport 产生奇怪的名字