0

アプリケーション用のプラグインを作成しました。コードで GDAL ライブラリを使用しない場合、アプリケーションはこのプラグインを使用でき (QPlugin がロードします)、問題なく動作します。しかし、GDAL ライブラリのクラスを使用するQPluginLoaderと、それをロードできず、errorstring()メソッドが返されます../serverplugin.dll Can't find module

2 つのエクスポートされたシンボルqt_plugin_instanceqt_plugin_query_verification_dataプラグイン DLL があります (Dependency walker でそれらを見つけました)。QPluginLoaderクラスを内部的に使用QLibraryして、DLL にエクスポートされた C シンボルとやり取りします。GDAL を使用しない場合、最初はすべてのプラグインでエクスポートされたシンボルが 2 つしかありません。GDAL を使用すると、これら 2 つのシンボルは、エクスポートされたシンボルの大きなリストの最後に移動されます。おそらく、これらの 2 つのエクスポートされたシンボルは最初にあるはずです。

私は何を間違っていますか?

4

2 に答える 2

3

QPluginLoader でも同じ問題がありました。私がそれをどのように解決したかを簡単に言うと、プラグインライブラリを作成します.lib2.dllの一部を使用するlib1.dllとしましょう。私のアプリケーションでは、QPluginLoader を介して lib1 をロードしようとしています。

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

この場合、loader.instance() は 0 を返します。解決策は、lib2.dll をアプリケーション フォルダにコピーすることでした。これは、アプリケーションがプラグイン lib1 を適切にロードするために lib2.dll を使用するためです。

于 2012-10-28T22:42:05.827 に答える