我正在尝试构建一个用 C 编写的 dll,它将由其他也用 C 编写的程序导入。
因此,dll 正在导出的所有函数都在 .dll 中定义,“没有 __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: 导出 PrepareSeverResponse
调用约定: __stdcall(/Gz)
希望这能让它更清楚。