1

我正在 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++ 函数声明都用 using 装饰"__declspec(dllexport)"和包围

extern "C" {
...
...
...
}

/克里斯托弗

4

3 回答 3

1

它正在寻找一个错位的名字,所以你不想要 extern "C"。

?CTC_Cleanup@YAXXZ 正在使用 VC++ 名称修饰来获取一个名为 CTC_Cleanup 并返回 void 的函数。

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

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

于 2009-12-16T16:14:20.610 回答
0

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

于 2009-12-16T10:45:57.850 回答
0

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

于 2009-12-16T10:49:43.840 回答