DLL 動態和靜態匯入

2021-04-20 06:42:22 字數 1461 閱讀 2592

在這裡只談動態庫dll

1 建立dll(可以選擇有入口函式或沒有)

三步:第一步,宣告,分為.h和.def兩個方式:

a 格式:#ifndef lib_h

#define lib_h

extern "c" int _declspec(dllexport) add(int x,int y);

#endif

b 格式:library test                            //dll的名字

exports

add @ 1                                 //1為序號,可隨意指定

第二步,實現檔案.cpp,其中第一步若採用.h,只需在.cpp中加入#include "lib.h"

第三步,編譯,然後構建dll檔案,b格式比a格式要多生成乙個lib檔案

2 在自己的應用程式中呼叫dll(分為靜態呼叫和動態呼叫兩種)

靜態呼叫:

#pragma comment(lib,"test.lib");

extern "c" _declspec(dllimport) add(int x,int y);

在程式中呼叫add的時候自動呼叫

動態呼叫:

a 巨集定義函式指標型別:typedef int (*lpaddfun)(int,int);

b 定義dll控制代碼和函式指標:hinstance hdll;

lpaddfun addfun;

c 動態呼叫:ddll=loadlibrary("……//test.dll");

addfun=(lpaddfun)getprocaddress(hdll,"add");

d 動態銷毀:freelibrary(hdll)

備註:以上是關於匯出函式的操作,關於匯出變數的操作完全與上述相同。

關於匯出類的操作稍有不同,下面給出乙個簡單的示例,分為四步:

1 定義.h檔案:

#ifndef point_h

#define point_h

#ifdef dll_file

class _declspec(dllexport) point

#else

class _declspec(dllimport) point

#endif

#endif

2 定義.cpp檔案:

#ifndef dll_file

#define dll_file

#endif

#include "point.h"

point::point()

point::point(float x_cor,float y_cor)

3 編譯並構建,會產生.dll和.lib

4 靜態呼叫:

a #include "point.h"

b #pragma comment(lib,"**.lib");

c 根據類名自動呼叫

windows動態庫和靜態庫VS匯入

函式和資料被編譯進乙個二進位制檔案 通常擴充套件名為.lib 在使用靜態庫的情況下,在編譯鏈結可執行檔案時,鏈結器從庫中複製這些函式和資料並把它們和應用程式的其他模組組合起來建立最終的可執行檔案 exe檔案 當發布產品時,只需要發布這個可執行檔案,並不需要發布被使用的靜態庫。在使用動態庫的時候,往往...

C 中動態庫( dll)和靜態庫 lib

最近,做一些程式的封裝,就了解了c 中封裝動態庫 dll 和靜態庫 lib 的方法,以及兩種庫呼叫時異同,現在記錄下,後續有新的理解,會繼續更新 動態庫 dll 動態庫又稱 動態鏈結庫 英文為dll,是dynamic link library 的縮寫形式,dll是乙個包含可由多個程式同時使用的 和資...

VC 動態匯入DLL

一般的dll都會有對應的導入庫,方便程式靜態載入動態鏈結庫,否則的話,你可能就需要自己動態匯入了。匯入過程 1.loadlibrary 調入dll檔案,然後在手工getprocaddress獲得對應的函式了。2.有了導入庫,你就只需要鏈結導入庫後,按照標頭檔案函式介面的定義,宣告呼叫函式就可以拉。h...