QT 使用QLibrary載入動態庫

2021-09-12 12:53:19 字數 1127 閱讀 3459

原文:

1)win下動態庫呼叫有關的函式包括:

(1)loadlibrary,裝載動態庫。

(2)getprocaddress,獲取要引入的函式,將符號名或標識號轉換為dll內部位址。

(3)freelibrary,釋放動態鏈結庫。

2)unix上與動態庫呼叫有關的函式包括:

(1)_開啟動態鏈結庫:dlopen,函式原型void *dlopen (const char *filename, int flag); dlopen用於開啟指定名字(filename)的動態鏈結庫,並返回操作控制代碼。

(3)關閉動態鏈結庫:dlclose,函式原型為: int dlclose (void *handle); dlclose用於關閉指定控制代碼的動態鏈結庫,只有當此動態鏈結庫的使用計數為0時,才會真正被系統解除安裝。

(4)動態庫錯誤函式:dlerror,函式原型為: const char *dlerror(void); 當動態鏈結庫操作函式執行失敗時,dlerror可以返回出錯資訊,返回值為null時表示操作函式執行成功。

我們來分析下qt的源**,看看qt是如何封裝這兩種不同的呼叫動態庫的方法。

下面是我用vc編寫的乙個動態庫中的函式add:

extern "c" __declspec(dllexport) int __stdcall add(int a,int b)

下面我就用qlibrary來呼叫一下:

qlibrary lib("qtdlltest.dll");

if (lib.load())

unix

原來如此啊。

我們仔細看下qlibrary_win.cpp檔案,load_sys函式呼叫了loadlibrary,unload_sys呼叫了freelibrary,resolve_sys呼叫了getprocaddress。而在qlibrary_unix.cpp檔案中,各種linux平台又分好多種。但是基本上load_sys呼叫了dlopen,unload_sys呼叫了dlclose,resolve_sys呼叫了dlsym。在hpux中dlopen對應shl_load,dlclose對應shl_unload,dlsym對應shl_findsym。

原來qlibrary就是這樣實現不同平台動態庫的呼叫.

使用QLibrary載入動態庫

使用qlibrary可以在程式執行時載入動態鏈結庫。乙個qlibrary的例項作用於乙個單一的共享庫上。qlibrary提供了一種平台無關的方式訪問庫中的函式。可以在構建qlibrary的例項時將要載入的庫檔案傳入,也可以在建立例項後使用setfilename 顯式的設定要載入的檔名。當載入庫檔案時...

使用QLibrary載入動態庫

使用qlibrary可以在程式執行時載入動態鏈結庫。乙個qlibrary的例項作用於乙個單一的共享庫上。qlibrary提供了一種平台無關的方式訪問庫中的函式。可以在構建qlibrary的例項時將要載入的庫檔案傳入,也可以在建立例項後使用setfilename 顯式的設定要載入的檔名。當載入庫檔案時...

詳解 Qt 下 QLibrary 動態載入 dll

qt下qlibrary動態載入dll是本文要介紹的內容,先來配置環境,測試平台 windows xp sp3 qt 4.5 compaq visual fortran version 6.6。下了個qt creator功能挺強大的,測試一下qlibrary動態載入vs下編譯的fortran寫的dll...