无法防止名称修改

标签 c visual-studio dll name-mangling

我正在尝试构建一个用 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/

相关文章:

c# - 监听从不同 winform 触发的自定义事件

.net - 在Visual Studio中签名程序集

c# - 复制 C++ dll 以构建通过扩展引用它们的任何 C# 项目的输出

c++ - 如何在 Visual Studio 2008 中创建 COM DLL?

c - 虚拟文件系统内存块创建

c - 错误: expected ‘;’ before ‘printf’ C

node.js - 如何在 CentOS 6.6 vps 上部署使用 Visual Studio 开发的 Node JS 应用程序

vb.net - VS 2008 中的 "Multi-threaded Debug DLL"运行时库选项到底是做什么的?

c - MPI_Send 或 MPI_Recv 给出段错误

c - 使用 GSocket 接收简单的 UDP 消息