動態庫與靜態庫呼叫方法

2021-10-13 07:39:44 字數 2092 閱讀 8914

1.引用靜態庫

1.包含標頭檔案

​ 注意: 如果.**件不在當前工程目錄下,則需要指定.**件路徑.

兩種方法

方法a

a.右鍵專案->屬性->c/c++->常規->附加包含目錄->編輯->新增資料夾路徑(精確到最後一級目錄)

b.#include 「***.h」

方法b

a.#include 「檔案路徑名/***.h」

2.新增依賴項 , 指定使用哪個 .lib

step1

將.lib檔案路徑編輯到其中

step2

兩種方法

方法a1.#pragma comment(lib,「testlib.lib」)

方法b

#include

#include

"../testlib/testlib.h"

#pragma comment(lib,"testlib.lib")

//注意,在屬性設定中僅新增了附加庫目錄,這裡需要指定附加庫檔名

2.製作動態庫

新建空dll專案

testdll.h標頭檔案編寫

#ifndef _testdll_h_

#define _testdll_h_

__declspec

(dllexport)

//特別宣告(以dll方式匯出)

intadd_num

(int a,

int b)

;#endif

testdll.c編寫

#include

"testdll.h"

intadd_num

(int a,

int b)

重新生成

dependency軟體檢視dll檔案 是否有介面

3.使用動態庫

包含標頭檔案 又叫匯入標頭檔案

#ifndef _testdll_h_

#define _testdll_h_

#ifdef _dllapi

#define dllapi __declspec(dllexport)

#else

#define dllapi __declspec(dllimport)

#endif

//__declspec(dllexport) //特別宣告(以dll方式匯出)

int dllapi add_num

(int a,

int b)

;#endif

a)隱式呼叫法

新增 附加依賴項

兩種方法

新增#pragma comment(lib,"testdll.lib")//這不是靜態庫,是導入庫

b)動態呼叫法

新增標頭檔案

新增呼叫** :hmodule hdll = loadlibrary(l"../testdll/release/testdll.dll");

給動態庫中的某函式定義別名 :typedef int (*padd) (int a,int b);

新增獲得函式指標** :padd padd = (padd)getprocaddress(hdll,"add_num");//尋找函式名為add_num的函式,並將其指標賦值給padd 注意函式名不一定為自己所寫,可以使用dependency檢視函式名;

直接使用函式指標padd(10,20);

使用完後,使用freelibrary(hdll);釋放動態庫中函式;

靜態庫與動態庫的呼叫

呼叫鏈結庫的三種方法 1 複製標頭檔案和lib檔案到專案目錄下,然後在附加依賴項加入 lib 2 附加包含目錄 指定 include,附加依賴項新增 lib 3 在 中新增 pragma comment lib,lib 並且新增相應的 h標頭檔案 呼叫動態庫 靜態呼叫 1 複製.h,lib檔案和.d...

靜態庫與動態庫相互呼叫

測試場景,test,lib1,lib2,dll1,dll2,分為下面四種情況 1 test lib1 lib2 lib1編譯自己的 對lib2的部分,只需要lib2的標頭檔案,對lib2的 實現,使用佔位符關聯。生成test連線的時候,把lib1的 實現包含進來,再遞迴,把lib1中關聯lib2的 ...

靜態庫與動態庫相互呼叫

測試場景,test,lib1,lib2,dll1,dll2,分為下面四種情況 1 test lib1 lib2 lib1編譯自己的 對lib2的部分,只需要lib2的標頭檔案,對lib2的 實現,使用佔位符關聯。生成test連線的時候,把lib1的 實現包含進來,再遞迴,把lib1中關聯lib2的 ...