1. 程式人生 > >c++呼叫動態庫的方法

c++呼叫動態庫的方法

一、建立動態庫(vs2013)

   可以建立一個空的c++專案,寫好庫裡的函式;最後在編譯時,生成動態庫,我這裡隨便寫了個函式

然後右鍵專案名,選擇“屬性”,“常規”,“配置型別”改成“動態庫(.dll)”如圖:

再點選生成即可生成動態庫

二、呼叫動態庫

1、建立一個函式指標,其指標資料型別要與呼叫的 DLL 引出函式相吻合,比如.typedef  void(*fun)(int*,int);

2、定一個控制代碼例項,用來取DLL的例項地址。HINSTANCE hdll;

格式為hdll=LoadLibrary(“DLL地址”);這裡字串型別是LPSTR,當是unicode字符集的時候會不行,因此要在配置-屬性-常規裡面把預設字符集“unicode”改成支援多字元擴充套件即可。

3、取的地址要判斷,返回的控制代碼是否為空,如果為無效控制代碼,那麼要釋放載入DLL所佔用的記憶體。

FreeLibrary(hdll);

4、然後定義一個函式指標,用來獲取你要用的函式地址,這個咋用呢?

先是定一個函式指標 fun FUN;然後通過GetProcAdress來獲取函式的地址,這個函式引數是什麼呢?

引數是DLL的控制代碼和你要呼叫的函式名:比如:FUN=(fun)GetProcAdress(hdll,"sum");

這裡也要判斷要函式指標是否為空,如果沒取到要求的函式,那麼要釋放控制代碼

FreeLibrary(hdll);

5、然後通過函式指標來呼叫函式。

FUN(int *p,int count);這裡不能用函式名來使用函式,因為這個DLL本身不是當前CPP的一部分,而是通過windows去呼叫.沒有在這個工程裡宣告或者定義,而是暴露出一個頭,要指標獲取他的地址,通過指標來呼叫.

最後呼叫結束後,就釋放控制代碼

FreeLibrary(hdll);

如圖:

編譯即可

注意:

請注意此程式碼方法宣告中的 __declspec(dllexport) 修飾符。這些修飾符使 DLL 能夠匯出該方法以供其他應用程式使用