8

我正在开发一个 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);

垃圾箱文件

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

4

1 回答 1

6

您可以使用 .def 文件。它可以让您在没有装饰的情况下导出功能。

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

于 2011-07-11T11:47:30.203 回答