C++ dll動態程式庫建置架構筆記(CMake build) -5 如何使用LoadLibraryA()讀取class架構dll
上一篇介紹dll裡建立class,但他是使用header.h+.lib+.dll方式讀取dll程式,這篇要講解我如何使用LoadLibraryA()讀取,先說程式碼會很多,因為要把整個class重新改寫成function型式,這方法應該能讓C++ dll程式在C語言上執行。這其實是我一開始學習建置dll的方式,順便紀錄一下,可能還有更好的方式我還沒研究到。 一、void pointer說明 這個功能很強大,他可以指向所有資料型態的指標,我這邊把他拿來指向整個class。在外部使用的人只會看到這是一個void pointer,不知道他其實是一個class,所以可以將整個class隱藏在dll內部。 二、建立class指標 假如有一個 class 名稱是 foo。 class foo { void Add(int b); ... }; 使用 void pointer 指標指向 class。 //create void pointer typedef void* foo_handle; //void pointer指標指向新建立的class foo_handle foo_h = (foo_handle)new foo(); 三、刪除空指標裡的class 當 class 不再使用時,或程式結束時,要將佔用的資源釋放,pointer 要指向 NULL,因為通常會檢查這個指標如果非 NULL 表示指向的 class 還存在著。 //刪除class delete (foo*)foo_h; //將void pointer 指向空 foo_h = NULL; 四、在dll裡建立\刪除class 我這邊使用 extern "C" __declspec(dllexport) 建立dll function。 typedef void* foo_handle; extern "C" __declspec(dllexport) foo_handle createClass() { return (foo_handle)new foo(); } extern "C" __declspec(dllexport) int des