DLL學習筆記

讀<VC技術內部第四版>

 

Win32 DLL
在DLL代碼中,必須顯示生命導出函數,類似這樣:
extern "C" __declspec(dllexport) void MyFunction(int n);
在客戶方面,必須聲明對應的導入函數,類似這樣:
extern "C" __declspec(dllimport) void MyFunction(int n);
其中extern "C"是爲了讓MyFunction能夠被正確使用,而不是在程序中以一堆亂我們不認識的符號的形式出現

DEF格式的文件在Win32環境裏沒有太多的用途,只是在導出是C++函數時,必須在EDF文件裏使用修飾名。

進程中的每一個DLL都被一個唯一的32位HINSTANCE值所標識。如果程序使用了多個DLL,則每個都有不同的HINSTANCE值。實例句柄對裝載資源特別重要。Win32函數FindResource帶一個HINSTANCE參數。如果我們從DLL中獲取資源,則必須指定DLL的實例句柄。

顯示連接DLL的意思是通過DLL文件對應的LIB文件裝載,隱式則直接裝載DLL。如果用LoadLibrary顯示連接DLL的話,可以指定DLL的全路徑名。如果沒有指定路徑名或者用了隱式連接,則Windows將按照一定的順序搜索定位DLL(P430,下面有個小心,要注意)。

調試DLL,第一次要指定對應的EXE文件路徑,這個EXE文件要調用這個DLL,而且最好放到這個DLL程序對應的debug目錄下。

 

MFC DLL
AppWizard可以讓我們創建MFC庫支持的兩種DLL:擴展的DLL和正規的DLL。
擴展DLL理解就是與C++兼容性好,可以導出整個類,它不可以脫離MFC庫;而正規DLL可以被任何Win32變成環境(包括VB5.0)裝載,它可以導出C風格的函數,但不能導出C++類,正規DLL可以獨立於MFC庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章