【发布时间】:2011-10-02 17:40:25
【问题描述】:
我正在开发一个 DLL,它将使用 _stdcall 调用对流从另一种语言中使用(因此没有导入库,包括 dll 的头文件)。问题是 VC++ 似乎总是对其导出的符号进行一些名称修饰。我看到的所有引用都说使用 extern "C" 但这似乎仍然给我留下了一个前导下划线和一个 @ 加上导出名称后的一个数字。
最糟糕的一点是,在目标语言中自动加载扩展 dll 的方法本质上是“func_name = GetProcAddress(dll,”func_name")”,因此使用未修饰的名称 GetProcAddress 会失败,并且使用修饰的名称会抱怨非法变量名(@ 不允许):(
如何让 VC++ 导出完全没有名称装饰的东西?
extern "C" __declspec(dllexport) int __stdcall test(int x, const char *str);
dumpbin.exe
00011366 _test@8 = @ILT+865(_test@8)
【问题讨论】:
-
使用 stdcall 代替 cdecl 有什么原因吗?
-
您的目标是哪种语言?为什么
GetProcAddress失败,它返回函数的地址而不是名称,而且我不知道任何禁止在字符串中使用“@”的编程语言
标签: c++ dll name-mangling name-decoration stdcall