我是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类呢?