動態連結庫 DLL MFCDLL

2022-08-05 14:51:21 字數 1946 閱讀 2306

1.mfcdl建立

選擇mfcdll工程型別的專案,建立即可。

建立成功後,由於此dll為mfcdll,所以可以使用mfc類庫、可以新增對話方塊,功能較豐富。我在實驗中建立的mfcdll是一個會監視usb的對話方塊dll。

工程建立完了之後,可以像mfc一樣新增對話方塊,並在對話方塊上建立類嚮導重寫虛擬函式、響應訊息,本次的dll(mfcdll)為usb監視的視窗,所以建立了clisten類,並重寫視窗的訊息過程函式,如下所示:

lresult clisten::windowproc(uint message, wparam wparam, lparam lparam)

if(wparam == dbt_devicearrival)

break;

} default:

break;

} return cdialog::windowproc(message, wparam, lparam);

}

之後,需要定義該mfc dll的對外介面,需要在mfcdll.cpp內定義宣告,如下所示:

extern "c" __declspec(dllexport) bool listen(bool bstart)

尤其需要注意的是,需要在介面函式內的第一個語句處放置afx_manage_state(afxgetstaticmodulestate());,該語句是用來切換模組資源的。如果沒有該語句,那麼會在呼叫該dll的時候會出錯。定義了對外介面之後,需要在dll的def檔案中宣告該匯出函式,直接新增該函式名字就可以了,如下所示:

; mfcdll.def : 宣告 dll 的模組引數。

library

exports

; 此處可以是顯式匯出

listen

這樣,一個mfc的dll便完成了。

由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);

}

執行結果如下圖所示: