原文:
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...