gpt4 book ai didi

c++ - 无法引用另一个插件中的方法

转载 作者:行者123 更新时间:2023-11-28 04:27:10 32 4
gpt4 key购买 nike

我在 PluginA 中的 classA 中有一个方法,我能够在同一个插件内的所有类中编译和访问这个方法。当我尝试从另一个 pluginB 访问该方法时,出现以下错误。尽管我能够从 pluginB 引用和打印 pluginA 中的枚举。

\plugins\pluginB\mocks\classB.cpp:61: error: undefined reference to namespaceA::classA::methodA(int)

collect2.exe:-1: error: error: ld returned 1 exit status

非常感谢任何指导。

  • QT:4.8
  • IDE:QT creator 4.4.0
  • 操作系统:Windows 10

最佳答案

如果插件是独立的,则不能直接调用它们之间的函数。在这种情况下,如果您确实需要跨插件调用函数,则需要使用 GetProcAddress 来检索特定函数的地址。然而,这仅适用于使用 extern "C" 声明的自由函数:

// Somewher in pluginA
extern "C" void functionA() {}

// Somewhere in pluginB
using MyFunc = void(void);
MyFunc *pointer = GetProcAddress(module,TEXT("functionA"));
if (pointer)
pointer(); // call "functionA()";
else
qWarning("functionA() not found, pluginA not loaded");

请注意,您可能希望使用 EnumProcessModulesEx() 来搜索所有可能加载的 module

如果 pluginB 在编译时链接到 pluginA,这意味着您的 pluginB 的 .pro 文件中应该有 LIBS += -lpluginA。还要确保您在 classA 声明中使用了 __declspec( dllexport )__declspec( dllimport )

如果您使用 Qt Creator 向导生成您的 pluginA 项目,您的代码中应该已经有这样的东西:

#ifdef _MSC_VER

#if defined(LIBRARY_A)
#define LIBRARY_A_EXPORT __declspec(dllexport)
#else
#define LIBRARY_A_EXPORT __declspec(dllimport)
#endif

#else

#define LIBRARY_A_EXPORT

#endif

只需确保 classA 定义如下所示:class LIBRARY_A_EXPORT classA;

关于c++ - 无法引用另一个插件中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54019109/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com