VC6.0建立DLL動態連結庫四大要素
要成功地編輯,編譯和連結一個動態連結庫,應該包括以下要素:建立工程檔案,使用輸出說明,應用初始化函式和編制函式功能。
1. 建立工程檔案
在選取型別的時候要選擇“Dynamic __Link Library”或者“MFC AppWizard(DLL)”。
2.使用輸出說明
對DLL要輸出的函式或者變數必須進行明確的說明。方法有兩種,第一種是使用副檔名為def的模組定義檔案,將要輸出的函式以及變數放在該檔案的export部分:
/////////////////////////////////////////////////////////////////////////////////
EXPORTS
Function @1
Function @2
////////////////////////////////////////////////////////////////////////////////
其中@1、@2是指輸出順序號。
另一種方法是使用擴充套件儲存器屬性__declspec(dllexport),這種方法的優點是無需使用單獨的DEF檔案,只需在函式說明以及原型前面加上__declspec(dllexport)即可。例如輸出函式caller();
///////////////////////////////////////////////////////////////////////////
__declspec(dllexport) void caller(char *p);
__declspec(dllexport) void caller(char *p)
{
printf(“This is a caller”);
}
///////////////////////////////////////////////////////////////////////////
使用擴充套件貯存器屬性說明的方法有不足之處,就是無法設定順序號,無法說明私有屬性,以及不便在說明中更改動態連結庫的名稱。
3. 應用初始化函式
DLL模組的呼叫和釋放都是通過DllMain函式,所有的初始化和退出處理都是在這個函式中。如果不需要初始化和退出處理,可以不要這個函式,編譯程式自動提供一個什麼都不幹的DllMain函式。DllMain函式的引數及結構如下:
DllMain(HANDLE hMoudle, DWORD fdwReason, LPVOID lpReserved)
這裡函式名和引數型別都是固定的。函式根據fdwReason值來確定幹什麼,是初始化還是退出。
4. 編制功能函式
功能函式是指實現DLL要完成的功能的函式。它是一般的C、C++函式,只是要加上輸出說明(如果要作為DLL輸出函式的話)。