1.mfcdl建立
選擇mfcdll工程型別的專案,建立即可。
建立成功後,由於此dll為mfcdll,所以可以使用mfc類庫、可以新增對話方塊,功能較豐富。我在實驗中建立的mfcdll是乙個會監視usb的對話方塊dll。
工程建立完了之後,可以像mfc一樣新增對話方塊,並在對話方塊上建立類嚮導重寫虛函式、響應訊息,本次的dll(mfcdll)為usb監視的視窗,所以建立了clisten類,並重寫視窗的訊息過程函式,如下所示:
lresult clisten::windowproc(uint message, wparam wparam, lparam lparam)之後,需要定義該mfc dll的對外介面,需要在mfcdll.cpp內定義宣告,如下所示:if(wparam == dbt_devicearrival)
break;
} default:
break;
} return cdialog::windowproc(message, wparam, lparam);
}
extern "c" __declspec(dllexport) bool listen(bool bstart)尤其需要注意的是,需要在介面函式內的第乙個語句處放置afx_manage_state(afxgetstaticmodulestate());,該語句是用來切換模組資源的。如果沒有該語句,那麼會在呼叫該dll的時候會出錯。定義了對外介面之後,需要在dll的def檔案中宣告該匯出函式,直接新增該函式名字就可以了,如下所示:
; mfcdll.def : 宣告 dll 的模組引數。這樣,乙個mfc的dll便完成了。library
exports
; 此處可以是顯式匯出
listen
由mfc的dll建立可以發現,他的過程和non-mfcdll有不同點的,non-mfc的dll的匯出函式的宣告是在標頭檔案中,而mfc的則是在def'檔案中,不過mfc應該也可以使用non-mfc的方式的。此外需要注意的是在mfc的對外介面函式內新增哪一行模組資源切換語句。
2.mfc的dll的呼叫
對於mfc的dll的使用一般使用顯示呼叫方法,這和non-mfcdll一樣,不過可以發現mfc的dll既可以被mfc的程式呼叫,也可以被控制台的程式呼叫。部分呼叫**如下:
mfc程式呼叫
void cmfcloadalldlg::onbnclickedbutton2()控制台應用程式呼叫//宣告匯出函式指標
plisten plistenproc = null;
//通過getprocaddress獲取匯出函式位址並賦值給指標
plistenproc = (plisten)::getprocaddress(hdll, "listen");
//檢查獲取情況,成功,則呼叫函式
if(plistenproc == null)
else
//釋放載入的dll
::freelibrary(hdll);
}
//mfc dll執行結果如下圖所示:void testmfcdll()
//宣告匯出函式指標
plisten plistenproc = null;
//通過getprocaddress獲取匯出函式位址並賦值給指標
plistenproc = (plisten)::getprocaddress(hdll, "listen");
//檢查獲取情況,成功,則呼叫函式
if(plistenproc == null)
else
//釋放載入的dll
::freelibrary(hdll);
}
動態鏈結庫 靜態鏈結庫
包含標頭檔案和庫 idir 指定編譯查詢標頭檔案的目錄,常用於查詢第三方的庫的標頭檔案,例 gcc test.c i.inc o test。ldir 指定鏈結時查詢lib的目錄,常用於查詢第三方庫。llibrary 指定額外鏈結的lib庫 巨集定義 dmacro 以字串 1 預設值 定義 macro...
靜態鏈結庫 動態鏈結庫
庫是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種 靜態庫 a lib 和動態庫 so dll windows上對應的是.lib dll ...
靜態鏈結庫,動態鏈結庫
關於靜態鏈結庫,參考如下博文 當你完成了 開發,想把這個 給別人用,但是又不希望別人看到原始碼,就要給別人乙個庫和標頭檔案,庫和標頭檔案是配合的,缺一不可。或者過程相反,你從別人那裡拿到乙個庫和標頭檔案來使用。那麼如何編譯生成乙個庫給他人,如何使用從他人那裡拿到的庫呢?範例1 我們想把linuxfr...