无法防止名称损坏

Kar*_*agi 4 c dll name-mangling visual-studio

我正在尝试构建一个用C语言编写的dll,它将由其他用C语言编写的程序导入.

所以dll导出的所有函数都是在.dll "没有__declspec(dllexport)"(有意)中定义的.我已经定义了一个.def文件,其中只包含一个Export部分和我要导出的函数的名称(unmangled names).

我正在使用vc71/vs2003构建这个并且我仍然得到了错误的名称(如果我在记事本中打开.lib,我可以看到).同样只是为了澄清,visual studio也会导致C代码中的名称错位(我发现大多数资源都提到它只是C++的一个问题).

我怎样才能防止这个名字变形呢?

更多的信息:

被破坏的名称的格式为'functionName @ integer',其中integer表示以字节为单位的参数大小(而不是ordinal).例如,

来自.lib: _PrepareSeverResponse @ 8

.h: char*PrepareSeverResponse中的函数声明(unsigned int*size,handshake*ws_handshake);

.def: EXPORTS PrepareSeverResponse

召集公约: __ stdcall(/ Gz)

希望这更清楚.

Kar*_*agi 5

将调用约定更改为cdecl对我有用.extern"C"解决方案对我没什么帮助,因为在我的情况下问题是在编译.C文件时名称错误,好像我正确理解外部"C"解决方案是为了在编译cpp时抑制名称错位文件.