MFC擴展DLL與MFC規則DLL的相同點在於在兩種DLL的內部都可以使用MFC類庫,其不同點在於MFC擴展DLL與應用程序的接口可以是MFC的。MFC擴展DLL的含義在於它是MFC的擴展,其主要功能是實現從現有MFC庫類中派生出可重用的類。MFC擴展DLL使用MFC 動態鏈接庫版本,因此只有用共享MFC 版本生成的MFC 可執行文件(應用程序或規則DLL)才能使用MFC擴展DLL。
從前文可知,MFC規則DLL被MFC向導自動添加了一個CWinApp的對象,而MFC擴展DLL則不包含該對象,它只是被自動添加了DllMain 函數。對於MFC擴展DLL,開發人員必須在DLL的DllMain函數中添加初始化和結束代碼。
從下表我們可以看出三種DLL對DllMain入口函數的不同處理方式:
DLL類型 入口函數
非 MFC DLL 編程者提供DllMain函數
MFC規則 DLL CWinApp對象的InitInstance 和 ExitInstance
MFC擴展 DLL MFC DLL向導生成DllMain 函數
對於MFC擴展DLL,系統會自動在工程中添加如下表所示的宏,這些宏為DLL和應用程序的編寫提供了方便。像AFX_EXT_CLASS、AFX_EXT_API、AFX_EXT_DATA這樣的宏,在DLL和應用程序中將具有不同的定義,這取決於_AFXEXT宏是否被定義。這使得在DLL和應用程序中,使用統一的一個宏就可以表示出輸出和輸入的不同意思。在DLL中,表示輸出(因為_AFXEXT被定義,通常是在編譯器的標識參數中指定/D_AFXEXT);在應用程序中,則表示輸入(_AFXEXT沒有定義)。