簡體   English   中英

顯示來自 MFC DLL 的對話框

[英]Show dialog from MFC DLL

我加載了表單,但只有沒有功能的按鈕

HMODULE hModule = LoadLibrary(L"Tools.dll");

if (hModule != NULL)
{
    AfxSetResourceHandle(hModule);
    CDialog dgl(MAKEINTRESOURCE(199), NULL);
    dgl.DoModal(); 
}

所以我怎么能加載一個完整的 function 表格,我沒有 DLL 源代碼

To show Dialog box from MFC dll , like scenario - you have exported function in DLL and from that function you call DoModel() .This template actually stored in DLL module.You need to switch module state for current handle to be used.You can通過使用:

AFX_MANAGE_STATE(AfxGetStaticModuleState());

AFX_MODULE_STATE AfxGetStaticModuleState()

-> The AFX_MODULE_STATE結構包含模塊的全局數據,即模塊 state 被推送或彈出的部分。

在 DLL 代碼將是這樣的:

AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyDlg objMyDlg;
iRet = objMyDlg.DoModal(); 

僅當您確定對話框 class 實現是基於 MFC 並且 class 是從 Tools.Z06416233E2AB4C593321. 您可以嘗試使用Dependency Walker實用程序檢查 your.dll。
請注意編譯器會破壞構造函數名稱。 這就是我得到的以下聲明。

class __declspec(dllexport) TestDialog : public CDialog
{
public:
    TestDialog()
        :CDialog(10)
    {

    }
};

損壞的構造函數名稱:??_7TestDialog@@6B@

可能您將能夠根據您的檢查結果重新創建對話框 class header。 您還應該確保 Tools.dll 和您的應用程序的 MFC 版本相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM