VC++阻止所有符号名称装饰

Syn*_*ews 8 c++ dll name-mangling stdcall name-decoration

我正在研究一个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);
Run Code Online (Sandbox Code Playgroud)

DUMPBIN.EXE

00011366 _test @ 8 = @ ILT + 865(_test @ 8)

era*_*ran 6

您可以使用.def文件.它将允许您导出没有装饰的功能.

阅读:使用DEF文件从DLL导出