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...