我正在尝试构建一个用 C 编写的 dll,它将被同样用 C 编写的其他程序导入。
因此,dll 导出的所有函数都在 .dll "without __declspec(dllexport)"(有意)中定义。我已经定义了一个 .def 文件,其中只有一个导出部分和我要导出的函数的名称(未损坏的名称)。
我正在使用 vc71/vs2003 来构建它,但我仍然得到损坏的名称(如果我在记事本中打开 .lib,我可以看到)。同样只是为了澄清,visual studio 也会导致 C 代码中的名称重整(我能找到的大多数资源都提到这是仅 C++ 的问题)。
我怎样才能防止这个名称混淆?
更多信息:
错位名称的形式为“functionName@integer”,其中整数表示以字节为单位的参数大小(而非序数)。例如,
来自 .lib: _PrepareSeverResponse@8
.h 中的函数声明: char* PrepareSeverResponse(unsigned int* size ,handshake* ws_handshake);
.def: 导出 准备服务器响应
调用约定: __stdcall(/Gz)
希望这能让它更清楚。
最佳答案
将调用约定更改为 cdecl 对我有用。 extern "C"解决方案对我没有太大帮助,因为在我的情况下,问题出在编译 .C 文件时的名称修改,好像我理解正确一样,extern "C"解决方案用于在编译 cpp 时抑制名称修改文件。
关于无法防止名称修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7991309/