MFC-創建MFC圖形介面dll

創建MFC圖形介面dll

概述:

利用MFC的DLL框架,製作帶有圖形介面的dll,可以實現很多功能。

流程:

 

 

選擇靜態鏈接MFC DLL:以免有的庫沒有。

 

 

採用該框架創建的MFC,會自動生產一個MFC應用程式實例,但是我們還要添加一個圖形介面,不然為啥不直接用DLL,而用MFC的DLL呢。

添加對話框:

右鍵項目,然後添加對話框資源:

 

 

 

 

右鍵該對話框給其添加一個類,不然的話只是一個介面,沒有真正的引用它。

 

 

輸入類名會自動生成相關文件:

 

 

註:這裡如果添加類時,採用的是CDialogEx作為基類,需要在對應的對話框頭文件中添加"afxdialogex.h頭文件,因為VS不會自動添加。"

在MFC主函數中使用對話框:

MFC的正常框架是只有一個theApp。

前面我們創建了對話框類,但是還沒有調用它,所以需要在MFC的theApp中調用該對話框。

在項目中對應的MfcDllTest1.cpp中添加以下程式碼:

 

 

#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的記事本進程中:

 

 

結果和我們預期一樣。

Tags: