如何在C ++中从控制台应用程序显示MFC对话框?

时间:2014-12-05 13:39:23

标签: c++ mfc console-application

我有一个简单的MFC对话框。

class CMessageBoxWithCustomTextDlg : public CDialogEx
{
// Construction
public:
    CMessageBoxWithCustomTextDlg(CWnd* pParent = NULL); // standard constructor

    __declspec(dllexport) void SetData(std::string& data);

// Dialog Data
    enum { IDD = IDD_MESSAGEBOXWITHCUSTOMTEXT_DIALOG };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support


// Implementation
protected:
    HICON m_hIcon;

    // Generated message map functions
    virtual BOOL OnInitDialog();
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()
public:
  afx_msg void OnBnClickedShowMessagebox();
};

我想将它导出为dll,并从一个简单的控制台应用程序中调用它。有可能吗?

1 个答案:

答案 0 :(得分:1)

有可能;这是我如何做到的: 对于您的控制台应用程序,它只是这样:

#include <Windows.h>

typedef void (*EntryFunc)();
int main()
{
   HMODULE hMod = LoadLibrary(L"MFCDll.dll");

   EntryFunc func = (EntryFunc)GetProcAddress(hMod, "entrypoint");
   func();
}

DLL的名称是MFCDll.dll,在该DLL中有一个名为entrypoint的导出函数。

对于DLL我创建了一个新的MFC DLL项目。除了对话框代码和资源中的对话框之外,还添加以下代码:

extern "C" __declspec(dllexport) void entrypoint()
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());
   CMessageBoxWithCustomTextDlg dlg;
   dlg.DoModal();
}

控制台程序将加载DLL,调用DLL并显示对话框。