vc++防止所有符号名称的修饰



我正在研究一个使用_stdcall调用约定的DLL,它将从另一种语言中使用(因此没有导入库,包括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)

您可以使用.def文件。它将允许您导出不带修饰的函数。

Read:使用DEF文件从DLL导出

最新更新