如何使DLL的MFC应用程序?

时间:2016-11-22 10:03:29

标签: c++ dll mfc

我是MFC编程的新手。我有一个非常简单的MFC应用程序,显示一个简单的对话框。我想制作一个与这段代码相同的DLL。

工作对话框代码如下所示:

class MyForm : public CDialog
{
public:
    MyForm(CWnd* pParent = NULL) : CDialog(MyForm::IDD, pParent) {};
    enum { IDD = DIALOG1 }; 

protected:
    virtual void DoDataExchange(CDataExchange* pDX) {    CDialog::DoDataExchange(pDX); };
    virtual BOOL OnInitDialog()
    {
        CDialog::OnInitDialog();
        return true;
    }

public:
    DECLARE_MESSAGE_MAP()
};

//Actural App
class MyApp: public CWinApp
{
public: 
    MyApp() {};
    virtual BOOL InitInstance()
    {
        CWinApp::InitInstance();
        MyForm dlg;
        m_pMainWnd = &dlg;
        INT_PTR nResponse = dlg.DoModal();
        return false;
    }
};

BEGIN_MESSAGE_MAP(MyForm, CDialog)
END_MESSAGE_MAP()

//start the app
MyApp theApp;

我使用visual studio MFC DLL项目来创建一个新的DLL项目。我创建一个单独的* .h文件来声明dll类,并使用* .cpp文件来定义类。

这是* .h文件,如下所示:

//header file for dll project
#include "stdafx.h"
#include <afxwin.h>
#include "resource.h"   

class CMyDllApp : public CDialog
{
public:
    __declspec(dllexport) CMyDllApp();
    enum { IDD = DLL_Dialog };
protected:
    __declspec(dllexport) virtual void DoDataExchange(CDataExchange* pDX);
    __declspec(dllexport) virtual BOOL OnInitDialog();    
public:
    __declspec(dllexport) afx_msg void myFunction();
    DECLARE_MESSAGE_MAP()
};

//Actural App
class MyDllMain : public CWinApp
{
public:
    __declspec(dllexport) MyDllMain() {};
    __declspec(dllexport) virtual BOOL InitInstance();
};

现在我在我的客户端应用程序中包含* .h文件,但我不知道如何正确调用dll类。

即使我只包含* .h文件并且不添加任何其他代码,dll类的对话框只是替换我的客户端对话框,如果cpp文件中有MyDllMain theApp; dll项目。

//in *.cpp of the dll project
...
MyDllMain theApp;

如果我把这一行放在我的客户端应用程序中,我只会得到一个&#34; Assertion Failed&#34;运行时出错。 但是,如果我没有将行MyDllMain theApp;放在dll项目中,我怎么能在我想要的时候调用我的dll类呢?

0 个答案:

没有答案