DLL 呼叫方式

2021-06-07 19:56:05 字數 1228 閱讀 2792

dll(動態連線庫),分為動態呼叫和靜態呼叫。

1)動態呼叫:

首先:在vc++6.0中建立 win32 dynamic-link library工程建立乙個動態連線庫工程:

在標頭檔案testdll.h中寫下**

extern "c" int __declspec(dllexport) add(int numa, int numb);

在原始檔testdll.cpp中實現改函式:

int __declspec(dllexport) add(int numa, int numb)

其次,建立乙個測試程式,testdemo,建立乙個.cpp檔案,然後放下**:

hinstance hinstance;

typedef int (*lpadd)(int a, int b);

lpadd lpadd;

int main()

而應用程式對本dll的呼叫和對第2節靜態鏈結庫的呼叫卻有較大差異,下面我們來逐一分析。

首先,語句typedef int ( * lpaddfun)(int,int)定義了乙個與add函式接受引數型別和返回值均相同的函式指標型別。隨後,在main函式中定義了lpaddfun的例項addfun;

其次,在函式main中定義了乙個dll hinstance控制代碼例項hdll,通過win32 api函式loadlibrary動態載入了dll模組並將dll模組控制代碼賦給了hdll;

再次,在函式main中通過win32 api函式getprocaddress得到了所載入dll模組中函式add的位址並賦給了addfun。經由函式指標addfun進行了對dll中add函式的呼叫;

最後,應用工程使用完dll後,在函式main中通過win32 api函式freelibrary釋放了已經載入的dll模組。

通過這個簡單的例子,我們獲知dll定義和呼叫的一般概念:

(1)dll中需以某種特定的方式宣告匯出函式(或變數、類);

(2)應用工程需以某種特定的方式呼叫dll的匯出函式(或變數、類)。

2)靜態連線:

**如下:

#include

using namespace std;

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

//.lib檔案中僅僅是關於其對應dll檔案中函式的重定位資訊

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

int main()

DLL 呼叫方式

dll 動態連線庫 然而可以分為動態調用於靜態呼叫。下面我分別舉乙個例子說說。1 動態呼叫 首先 在vc 6.0中建立 win32 dynamic link library工程建立乙個動態連線庫工程 在標頭檔案testdll.h中寫下 extern c int declspec dllexport ...

DLL 呼叫方式

dll 動態連線庫 然而可以分為動態調用於靜態呼叫。下面我分別舉乙個例子說說。1 動態呼叫 首先 在vc 6.0中建立 win32 dynamic link library工程建立乙個動態連線庫工程 在標頭檔案testdll.h中寫下 extern c int declspec dllexport ...

DLL的呼叫方式

靜態呼叫靜態呼叫方式的特點是由編譯系統完成對dll的載入和應用程式結束時 dll 的解除安裝。當呼叫某dll的應用程式結束時,若系統中還有其它程式使用該dll,則windows對dll的應用記錄減1,直到所有使用該dll的程式都結束時才釋放它。靜態呼叫方式簡單實用,但不如動態呼叫方式靈活。dll e...