导出的函数名称不包含参数列表

时间:2009-12-16 10:44:04

标签: c++ dllexport

我正在Eclipse中使用c ++创建一个插件DLL。

尝试加载插件时出错:

?CTC_Cleanup@YAXXZ not found. Function is not available in myplugin.dll

当使用Dependency Walker将另一个工作插件与我的插件进行比较时,我注意到另一个插件中的函数名称是:"void CTC_Cleanup(void)",启用"Undecorate C++ functions" => "?CTC_Cleanup@YAXXZ"

在我的插件中,函数名称为:"CTC_Cleanup",启用"Undecorate C++ functions"没有任何区别。

.h文件中的我的C ++函数声明全部用"__declspec(dllexport)"修饰,并使用

包围
extern "C" {
...
...
...
}

/的Kristofer

3 个答案:

答案 0 :(得分:1)

它正在寻找一个受损的名称,因此你不需要extern“C”。

?CTC_Cleanup @ YAXXZ使用VC ++名称修改函数获取void并返回名为CTC_Cleanup的void。

但是,您使用的是g ++ 3.x或4.x,而g ++使用了不兼容的不同修改方案。

使用VC ++构建库,或者弄清楚如何使g ++使用VC ++名称修改。

答案 1 :(得分:0)

参数名称(实际上是参数类型,正式名称​​真的在此级别无关紧要)与C链接无关;在C中,你没有任何重载,所以函数名本身就足够了,参数的类型无关紧要。

答案 2 :(得分:0)

删除extern“C”,然后它应该工作:我猜你的插件将以预期的名称导出该函数。