MFC-創建MFC圖形界面dll

創建MFC圖形界面dll概述:利用MFC的DLL框架,制作帶有圖形界面的dll,可以實現很多功能 。
流程:

MFC-創建MFC圖形界面dll

文章插圖
選擇靜態鏈接MFC DLL:以免有的庫沒有 。
MFC-創建MFC圖形界面dll

文章插圖
采用該框架創建的MFC,會自動生產一個MFC應用程序實例 , 但是我們還要添加一個圖形界面 , 不然為啥不直接用DLL,而用MFC的DLL呢 。
添加對話框:右鍵項目,然后添加對話框資源:
MFC-創建MFC圖形界面dll

文章插圖

MFC-創建MFC圖形界面dll

文章插圖
右鍵該對話框給其添加一個類,不然的話只是一個界面 , 沒有真正的引用它 。
MFC-創建MFC圖形界面dll

文章插圖
輸入類名會自動生成相關文件:
MFC-創建MFC圖形界面dll

文章插圖
注:這里如果添加類時 , 采用的是CDialogEx作為基類,需要在對應的對話框頭文件中添加"afxdialogex.h頭文件,因為VS不會自動添加 。"
在MFC主函數中使用對話框:MFC的正??蚣苁侵挥幸粋€theApp 。
前面我們創建了對話框類,但是還沒有調用它,所以需要在MFC的theApp中調用該對話框 。
在項目中對應的MfcDllTest1.cpp中添加以下代碼:
MFC-創建MFC圖形界面dll

文章插圖
#include"MfcTestDialog.h"??//使用對話框:MfcTestDialog* pMfcTestDialog = NULL;DWORD WINAPI ThreadProc(LPVOID lpParameter){if (!pMfcTestDialog)pMfcTestDialog = new MfcTestDialog();pMfcTestDialog->DoModal();delete(pMfcTestDialog);FreeLibraryAndExitThread(theApp.m_hInstance, 0X0);}BOOL CMfcDllTest1App::InitInstance(){CWinApp::InitInstance();::CreateThread(NULL, NULL, ThreadProc, NULL, NULL, NULL);//新添加return TRUE;}解釋一下這幾行代碼的原因:
在InitInstance()中創建線程是以免dll中創建模態對話框卡住 。
MfcTestDialog* pMfcTestDialog = NULL;//創建類實例變量DWORD WINAPI ThreadProc(LPVOID lpParameter)//線程函數{    if (!pMfcTestDialog)        pMfcTestDialog = new MfcTestDialog();    pMfcTestDialog->DoModal();//調用模態對話框    delete(pMfcTestDialog);//關閉對話框后,刪除該變量    FreeLibraryAndExitThread(theApp.m_hInstance, 0X0);//刪除該dll模塊 , 并退出線程}測試代碼:生成dll后,隨便注入到一個進程中查看是否有對話框生成 。
(注:這里我生成的是x64的dll,需要注入到x64進程)
這里我注入到了windows的記事本進程中:
MFC-創建MFC圖形界面dll

文章插圖
結果和我們預期一樣 。
【MFC-創建MFC圖形界面dll】

    推薦閱讀