2012-07-16 46 views
0

我爲我的應用程序創建了一個插件。如果我沒有在我的代碼中使用GDAL庫,我的應用程序可以使用這個插件(QPlugin加載它)並且工作正常。但是,如果我使用GDAL庫中的類QPluginLoader無法加載它並且errorstring()方法返回../serverplugin.dll Can't find moduleQPluginLoader找不到模塊

插件DLL中有兩個輸出符號qt_plugin_instanceqt_plugin_query_verification_data(我發現它們是依賴於walker)。 QPluginLoader在內部使用QLibrary類與導出到DLL的C符號接口。如果我不使用GDAL,那麼在開始時我只有兩個導出的符號在所有插件中。當我使用GDAL時,這兩個符號被移動到一個大的導出符號列表的末尾。也許這兩個導出的符號應該在開頭。

我在做什麼錯?

回答

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內。