2014-12-05 36 views
1

我有一个简单的MFC对话框。如何从C++的控制台应用程序显示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并从简单的控制台应用程序调用它。可能吗?

+0

您应该为您的问题提供更多上下文。你没有解释使用控制台窗口的原因。 – rrirower 2014-12-05 13:45:41

+0

原因是,我的控制台应用程序正在测试图像处理算法,我也有一个单独的MFC工具(用于另一个项目中)显示此类图像。现在,我很快想要显示中间结果。 – alex555 2014-12-05 13:54:50

+0

你需要**来显示图像才能测试它吗?可以对内存中的图像执行许多测试而不显示它。 – 2014-12-05 15:02:23

回答

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导出函数。

对于DLL我创建了一个新的MFC DLL项目。而不是在对话框代码和资源的对话框中其他添加以下代码:

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

和控制台程序将加载DLL,调入DLL和对话节目。

相关问题