Если плагины независимы, вы не можете напрямую вызывать функции через них.
В этом случае, если вам нужно вызвать функцию через плагины, вам нужно использовать 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
.
Если плагин B связан с плагином A во время компиляции, это означает, что у вас должно быть LIBS += -lpluginA
в файле .pro вашего плагина B.
Также убедитесь, что вы используете __declspec( dllexport )
и __declspec( dllimport )
в декларации classA
.
Если вы использовали мастер Qt Creator для генерации проекта плагина A, у вас уже должно быть что-то подобное в вашем коде:
#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
;