用qt呼叫第三方庫

2021-07-15 16:39:53 字數 1306 閱讀 7889

宣告:事先我已經自己動手寫了乙個簡單的dll檔案(mydll.dll),c版介面的。並且用我前兩篇有關dll文章裡面的方法,從dll中匯出了導入庫(.lib)檔案,dll中有兩個函式,原型如下:

void helloworld();     //函式內部呼叫win32 api,功能是彈出乙個helloworld提示框

int add(int a,int b); //實現兩個數相加,並返回結果

下面分別通過顯示呼叫和隱式呼叫兩種方法,來模擬qt如何呼叫外部dll檔案中的功能函式,follow me....

預備知識:

1、如果在沒有導入庫檔案(.lib),而只有標頭檔案(.h)與動態鏈結庫(.dll)時,我們才需要顯示呼叫,如果這三個檔案都全的話,我們就可以使用簡單方便的隱式呼叫。

2、通常windows下程式顯示呼叫dll的步驟分為三步(三個函式):loadlibrary()、getprocadress()、freelibrary()

其中,loadlibrary() 函式用來載入指定的dll檔案,載入到呼叫程式的記憶體中(dll沒有自己的記憶體!)

getprocaddress() 函式檢索指定的動態鏈結庫(dll)中的輸出庫函式位址,以備呼叫

freelibrary() 釋放dll所佔空間 

1、顯示呼叫 

qt提供了乙個 qlibrary 類供顯示呼叫。下面給出乙個完整的例子:

typedef int (*fun)(int,int); //定義函式指標,以備呼叫

int main(int argc,char **argv)

) 下面是隱式呼叫的例項**:

int main(int argv ,char **argv)

{ hellowordl(); //呼叫win32 api 彈出helloworld對話方塊

qdebug()<

還是隱式呼叫方便啊,直接就可以呼叫dll中的函式...

補充:編譯的時候沒報錯,說明 pro檔案的引數沒問題,可能是執行的時候找不到so,執行時大概的庫搜尋路徑順序

1)當前目錄

2) ld_library_path引數設定目錄

3)  /etc/ld.so 下配置檔案設定,修改後需root使用者呼叫下ldconfig重新整理下

4)/lib ,/usr/lib目錄

建議在qtcreator 裡,project 裡環境變數ld_library_path增加 path_to_lib,或者直接把so檔案拷貝到當前呼叫主程式當前目錄

用qt呼叫第三方庫

宣告 事先我已經自己動手寫了乙個簡單的dll檔案 mydll.dll c版介面的。並且用我前兩篇有關dll文章裡面的方法,從dll中匯出了導入庫 lib 檔案,dll中有兩個函式,原型如下 void helloworld 函式內部呼叫win32 api,功能是彈出乙個helloworld提示框 in...

Qt 呼叫第三方庫

一 製作動態庫c 動態庫 c 生成dll,專案名稱mydll 件 ifndef mdll h define mdll h ifdef mylibdll define mylibdll extern c declspec dllimport else define mylibdll extern c ...

Qt使用第三方庫

src 3rdparty lib bin 上面的資訊在 pro 檔案中提供,以便 qmake 可以解析它並生成 makefiles。makefiles 包含編譯器和鏈結器生成輸出所需的所有資訊,無論它是可執行檔案,另乙個庫檔案等。使用 includepath 變數提供 mylibrary 的 inc...