主體思路如下:
我們的動態鏈結庫建立乙個基類,裡面的函式全部是純虛函式,之後再建立乙個子類繼承基類,實現裡面的函式,最後匯出乙個函式,這個函式返回乙個子類的物件但是卻被強制轉換為基類的基類指標。然後在應用程式中也對應建立乙個基類,之後呼叫匯出的函式,就可以使用子類實現的哪些功能了。
動態鏈結庫的建立
myclass_lib.h
#ifndef myclass_lib_h
#define myclass_lib_h
#include
class baseclass //基類,全部是純虛函式,也即匯出的介面
;class sonclass : public baseclass // 子類,實現虛函式
;extern "c" _declspec(dllexport) baseclass* create(); //這個函式用來返回乙個指向子類但返回值為父類的指標
#endif // myclass_lib_h
myclass_lib.cpp
#include "myclass_lib.h"
baseclass* create()
int sonclass::add(int x, int y) //函式的實現
int sonclass::sub(int x, int y)
之後編譯就可以生成我們需要的myclass_lib.dll了,之後就是dll的引用了。
我在devcpp環境下新建乙個.cpp檔案,**如下:
my_lib_class.cpp
#include
#include
#include
#include
class baseclass //同樣的基類
; int main()
create create;
create = (create)getprocaddress(hdll, "create"); //取得函式位址
if(create == null)
test = create(); //test為create()返回的乙個父類的指標
printf("3 + 2 = %d \n", test->add(3, 2)); //函式呼叫
printf("3 - 2 = %d \n", test->sub(3, 2));
flag = freelibrary(hdll); //釋放鏈結庫
if(flag == 0)
system("pause");
return 0;
} 把dll複製到該檔案目錄下,編譯執行,結果如下圖:
qt鏈結庫中類的匯出,以及使用 - vanpire110 - vanpire110的部落格
呼叫成功。
附:不知道認真的閱者有沒有發現這個程式的乙個問題,就是dll new了乙個子類的物件都沒有釋放,這個問題還沒有具體找出想法,還望大家指教。
Linux 關於動態鏈結庫以及靜態鏈結庫的一些概念
庫有動態與靜態兩種,動態通常用.so為字尾,靜態用.a為字尾。例如 libhello.so libhello.a 為了在同一系統中使用不同版本的庫,可以在庫檔名後加上版本號為字尾,例如 libhello.so.1.0,由於程式連線預設以.so為檔案字尾名。所以為了使用這些庫,通常使用建立符號連線的方...
Linux 關於動態鏈結庫以及靜態鏈結庫的一些概念
動態庫 dynamic link library abbr,dll 技術是程式設計中經常採用的技術。其目的減少程式的大小,節省空間,提高效率,具有很高的靈活性。採用動態庫技術對於公升級軟體版本更加容易。與靜態庫 static link library 不同,動態庫裡面的函式不是執行程式本身的一部分,...
Qt建立和使用動態鏈結庫
一 建立共享庫 1 新其他建專案,選擇 c 庫 2 選擇共享庫,並取專案名稱,單擊下一步。這裡取名位mylib 3 按預設配置單擊下一步至模組選項,選擇所需支援的模組。這裡勾選qtcore 和qtgui。4 直接下一步至完成。現在乙個共享庫的工程就新建好了。5 右擊專案新增新檔案,選擇qt 設計師介...