2011-11-16 44 views
2

以下是我的:我的應用程序是靜態編譯Qt 4.5。我正在使用qsqloci插件(靜態鏈接),它動態加載Oracle庫(oci.dll,...)。在運行時檢查Qt插件的依賴關係

我希望能夠檢查是否存在oracle dll,並根據結果使用插件功能。

而且問題:

  • 這有可能與靜態鏈接的插件?
  • 如果沒有,動態鏈接的插件是可能的(應用程序的其餘部分仍然靜態鏈接到Qt)?
  • 如果沒有,是否有可能?

回答

3

您可以檢查一個DLL可以通過使用QLibrary

庫加載後,而不是開始使用QLibrary::resolve,你會加載你的插件。

QLibrary lib("oci"); // QLibrary will try the platform's library suffix 
if (! lib.load()) { 
    qDebug() << "Library load error:" << lib.errorString(); 
    return; 
} 
// load plugin 

不能使用QPluginLoader加載,因爲你是靜態鏈接的插件,但你應該能夠使用QLibrary

manual狀態:

請注意,如果您的應用程序對Qt的靜態鏈接QPluginLoader不能使用。在這種情況下,您還必須靜態鏈接到插件。如果您需要在靜態鏈接的應用程序中加載動態庫,則可以使用QLibrary。

+0

好的,但插件是加載宏'Q_IMPORT_PLUGIN',它定義'在編譯時加載'插件。這個問題並沒有太多的檢測到DLL的可用性,而是動態地「加載」插件。 – gregseth

+1

如果你想要動態的Qt插件,你需要使用一個動態的Qt庫。我編輯過引用手冊。 –

+0

只是爲了確定; soes意味着插件_必須與Qt動態鏈接?或者說,插件_can_可以靜態鏈接到Qt,但_must_應該從應用程序動態加載? – gregseth