初学者,可能问题中有许多不恰当的说法,还请大侠们多多包涵基本弄懂如何建立一个com组件,由自定义的接口派生,接口很简单,只有一个函数。现在是想客户调用这个接口函数后显示一个对话框,可以做一些事情。我是照书一步一步做的,先由MFC AppWizard(Dll)建立一个Dll工程,用默认设置。然后加入一个基于CCmdTarget的派生类做为com组件类,定义一个接口,然后在组件类中由宏构建接口的派生类实现com的接口。接口很简单,如下
class IMyInterface: public IUnknown
{
public:
virtual void __stdcall test() = 0;
};
接口实现函数是这么写的
STDMETHODIMP_(void) CMyComObj::XMyComObj::test()
{
AfxMessageBox("My Test!");
}然后生成Dll,注册。在客户程序中调用,一切正常,可以弹出消息框。然后我想加入一个自定义对话框,我这么做的:首先加入一个对话框资源,由classwizard生成关联类,比如是CDlg1,然后在组件类中加入一个成员变量CDlg1* m_pDlg,最后在接口函数实现中显示出来:STDMETHODIMP_(void) CMyComObj::XMyComObj::test()
{
METHOD_PROLOGUE_EX_(CMyComObj, MyComObj)
pThis->m_pDlg=new CDlg1();
pThis->m_pDlg->Create(CDlg1::IDD, NULL);
pThis->m_pDlg->ShowWindow(SW_SHOW);
}运行时出现断言错误,调试跟踪到pThis->m_pDlg->Create(CDlg1::IDD, NULL);这句时出错,断言错误是出现在MFC库文件dlgcore.cpp中,出现在
if (!_AfxCheckDialogTemplate(lpszTemplateName, FALSE))
{
ASSERT(FALSE); // invalid dialog template name
PostNcDestroy(); // cleanup if Create fails too soon
return FALSE;
}
好像是_AfxCheckDialogTemplate()返回false导致断言错误。可是显示非模对话框这三句程序写在一般的应用程序中如一个基于对话框应用程序的按钮响应函数中是正常的,为什么到这里会出错。我查了一下MSDN,却找不到_AfxCheckDialogTemplate这个库函数的信息,所以也不知道为什么错了。请教各位大侠,相在接口函数中显示一个对话框应该如何做呢?或者我写的语句哪错了呢,谢谢!
class IMyInterface: public IUnknown
{
public:
virtual void __stdcall test() = 0;
};
接口实现函数是这么写的
STDMETHODIMP_(void) CMyComObj::XMyComObj::test()
{
AfxMessageBox("My Test!");
}然后生成Dll,注册。在客户程序中调用,一切正常,可以弹出消息框。然后我想加入一个自定义对话框,我这么做的:首先加入一个对话框资源,由classwizard生成关联类,比如是CDlg1,然后在组件类中加入一个成员变量CDlg1* m_pDlg,最后在接口函数实现中显示出来:STDMETHODIMP_(void) CMyComObj::XMyComObj::test()
{
METHOD_PROLOGUE_EX_(CMyComObj, MyComObj)
pThis->m_pDlg=new CDlg1();
pThis->m_pDlg->Create(CDlg1::IDD, NULL);
pThis->m_pDlg->ShowWindow(SW_SHOW);
}运行时出现断言错误,调试跟踪到pThis->m_pDlg->Create(CDlg1::IDD, NULL);这句时出错,断言错误是出现在MFC库文件dlgcore.cpp中,出现在
if (!_AfxCheckDialogTemplate(lpszTemplateName, FALSE))
{
ASSERT(FALSE); // invalid dialog template name
PostNcDestroy(); // cleanup if Create fails too soon
return FALSE;
}
好像是_AfxCheckDialogTemplate()返回false导致断言错误。可是显示非模对话框这三句程序写在一般的应用程序中如一个基于对话框应用程序的按钮响应函数中是正常的,为什么到这里会出错。我查了一下MSDN,却找不到_AfxCheckDialogTemplate这个库函数的信息,所以也不知道为什么错了。请教各位大侠,相在接口函数中显示一个对话框应该如何做呢?或者我写的语句哪错了呢,谢谢!
解决方案 »
- 如何启动exe的快捷方式?通过CreateProcess()可以吗?
- 求救:无法在windows2000下创建MSXML2::DOMDocument
- VC6.0的一个疑问?
- 如何判断一个视图已经关联到一个文档,如果没有如何关联,在线等,整了我好久了?
- 怎样得到已知标题的IE窗口的句柄?--急用,谢谢!
- 有没有熟悉遗传算法的,过来看看,很简单的问题
- 有IE编程的朋友过来看一下:
- Cannot open precompiled header file: 'Debug/ClientSock.pch':这是什么意思?
- 我要调试我的动态连接库,我应该如何设置settings,请大家帮帮我!
- 如何实现应用程序与动态库通信???
- 怎么把一个程序写进我的程序运行时再释放?
- 如何把硬盘上的文件用socket发送出去
用ATL窗体很容易创建对话框
AFX_MANAGEED_RESOURCE
宏有可能记错