0

我为我的应用程序创建了一个插件。如果我不在我的代码中使用 GDAL 库,我的应用程序可以使用这个插件(QPlugin 加载它)并且它工作正常。但是,如果我使用 GDAL 库中的类,QPluginLoader则无法加载它并且该errorstring()方法返回../serverplugin.dll Can't find module.

在插件 DLL 中有两个导出的符号(我用 Dependency walker 找到了它们qt_plugin_instance)。在内部使用该类与导出到 DLL 的 C 符号进行交互。如果我不使用 GDAL,我一开始在所有插件中只有两个导出的符号。当我使用 GDAL 时,这两个符号被移动到导出符号的大列表的末尾。也许这两个导出的符号应该在开头。qt_plugin_query_verification_dataQPluginLoaderQLibrary

我究竟做错了什么?

4

2 回答 2

3

我对 QPluginLoader 也有同样的问题。简而言之,我是如何解决它的:我创建了插件库,比如说 lib1.dll,它使用了 lib2.dll 中的一些东西。在我的应用程序中,我尝试通过 QPluginLoader 加载 lib1。

QPluginLoader loader( adaptersDir.absoluteFilePath(fileName) );
AdapterInterface* adapterIface = qobject_cast<AdapterInterface*>(loader.instance());

在这种情况下,loader.instance() 返回 0。解决方案是将 lib2.dll 复制到应用程序文件夹中,因为应用程序使用它来正确加载插件 lib1。

于 2012-10-28T22:42:05.827 回答
0
QT_BEGIN_NAMESPACE
#define Plugin_iid "Plugin"
Q_DECLARE_INTERFACE(PluginInterface,Plugin_iid)
QT_END_NAMESPACE 

Q_PLUGIN_METADATA(IID "PluginInterface" FILE "Plugin.json")
Q_INTERFACES(PluginInterface)
于 2020-11-14T01:25:56.690 回答