動態庫DLL中類的使用

2021-07-03 02:42:18 字數 1692 閱讀 2602

一、dll中類的匯出

在類名稱前增加 _declspec(dllexport)定義,例如:

class _declspec(dllexport) cmath;

通常使用預編譯開關切換類的匯入匯出定義,例如:

#ifdef dllclass_exports

#define ext_class _declspec(dllexport)//dll

#else

#define ext_class _declspec(dllimport)//使用者

#endif

class ext_class cmath;

二、使用dll中的類

1、匯入dll的lib

2、類的定義

3、使用類

例子**如下:

dll類原始碼

.h檔案

#ifndef _dll_class_

#define _dll_class_

//定義匯入,匯出巨集開關.

#ifdef dllclass_export

#define ext_class _declspec(dllexport)

#else

#define ext_class _declspec(dllimport)

#endif

class ext_class cmath

;#endif

.cpp檔案

#define dllclass_export

#include "dllclass.h"

#include #include bool callback dllmain(hinstance hinst,dword fdwreason,void* reserve)

break;

case dll_process_detach:

break;

case dll_thread_attach:

break;

case dll_thread_detach:

break;

} return 1;

}int cmath::add(int num1,int num2)

int cmath::sub(int num1,int num2)

我們看到上面的dll類中包含了dllmain(...)函式,這個函式為dll動態庫的程式入口。

入口程式不是dll必須的,常用於dll內部初始化或善後處理。

bool winapi dllmain(

hinstance hinstdll,//動態庫例項控制代碼

dword fdwreason,//初呼叫原因

lpvoid  lpvreserved//保留值

);返回true,表示動態庫載入成功。

dllmain(.... ) 動態庫的載入或解除安裝時會被呼叫。例如:使用loadlibrary或freelibrary時會被呼叫。

fdwreason取值如下:

#define dll_process_attach 1 //程序載入

#define dll_thread_attach   2    //執行緒載入

#define dll_thread_detach   3   //執行緒解除安裝

#define dll_process_detach 0   //程序解除安裝

一般使用動態鏈結庫DLL中類的方法

現在假設你的建立的dll名是win32dll 1.新建乙個工程。將上述的三個檔案 win32dll.lib,win32dll.dll,win32dll.h,拷貝到當前工程目錄中。在工程的標頭檔案中,引入上述標頭檔案和lib庫。include win32dll.h pragma comment lib...

反射動態呼叫DLL類庫測試

定義 可以在執行時獲得.net中每乙個型別 包括類 結構 委託 介面和列舉等 的成員,包括方法 屬性 事件,以及建構函式等。還可以獲得每個成員的名稱 限定符和引數等。有了反射,即可對每乙個型別瞭如指掌。如果獲得了建構函式的資訊,即可直接建立物件,即使這個物件的型別在編譯時還不知道 同乙個功能不用反射...

怎麼在dll中新增類,和使用dll中的類

dll.h ifdef dll hiddevice class declspec dllexport chiddevice 匯出類 else class declspec dllimport chiddevice 匯入類po endif main.cpp include dll.h pragma c...