我正在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
答案 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”,然后它应该工作:我猜你的插件将以预期的名称导出该函数。