qt呼叫import sys庫 用qt呼叫第三方庫

2021-10-12 23:43:11 字數 2125 閱讀 5004

宣告: 事先我已經自己動手寫了乙個簡單的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沒有自己的記憶體!)

freelibrary() 釋放dll所佔空間

1、顯示呼叫

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

1 #include 

2 #include 

3 #include 

4 #include 

5 #include "dll.h"             //引入標頭檔案

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

7 int main(int argc,char **ar**)

8 22         else

23             qmessagebox::information(null,"no","linke to function is not ok!!!!");

24     }

25     else

26         qmessagebox::information(null,"no","dll is not loaded!");

27         return 0;  //載入失敗則退出

28}mydll.dll為自定義的dll檔案,將其複製到程式的輸出目錄下就可以呼叫。顯然,顯示呼叫**書寫量巨大,實在不方便。

2、隱式呼叫

1、首先我們把 .h 與 .lib/.a 檔案複製到程式當前目錄下,然後再把dll檔案複製到程式的輸出目錄,

2、下面我們在pro檔案中,新增 .lib 檔案的位置: libs+= -l d:/hitempt/api/ -l mydll

-l 引數指定 .lib/.a 檔案的位置

-l  引數指定導入庫檔名(不要加副檔名)

另外,導入庫檔案的路徑中,反斜槓用的是向右傾斜的

補充:unix:libs += -l your_lib_path -lyour_lib(-l後面是庫的名字去掉lib和字尾

比如libprotobuf.so,則為-lprotobuf)

win32:libs += your_lib_path/your_lib(mingw和msvc可能不一樣)

3、在程式中include標頭檔案(我試驗用的dll是用c寫的,因此要用 extern "c" )

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

1 #include 

2 #include 

3 extern "c"    //由於是c版的dll檔案,在c++中引入其標頭檔案要加extern "c" {},注意

4 7 int main(int ar** ,char **ar**)

8 還是隱式呼叫方便啊,直接就可以呼叫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呼叫第三方庫

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

QT學習》QT生成與呼叫共享庫

1.建立c 庫 1.1點選new project 1.2選擇庫模板 選擇 library 中的 c 庫 再點選 choose 1.3選擇共享庫 給共享庫取個名稱,並指定生成檔案存放路徑。再點選 下一步 1.4選擇編譯器 再點選 下一步 1.5選擇所需要的模組 預設選擇qtcore qtcore 模組...