描述:
CDialog是从CCmdTarget继承下来的,可是不能从CDialog的派生类中直接得到
IDispatch接口,(在CMyDialog的成员函数中用下面代码会使程序崩溃)
LPDISPATCH pDisp = this->GetIDispatch(TRUE);
要对CMyDialog进行怎样的处理才能使上面这句代码正确执行呢?
解决方案1:
在CMyDialog的类声明中(即头文件)加入
DECLARE_DISPATCH_MAP()
DECLARE_INTERFACE_MAP()
两个宏,再在源文件(.cpp)中添加
BEGIN_INTERFACE_MAP( CMyDialog, CDialog )
INTERFACE_PART( CMyDialog, IID_IDispatch, Dispatch )
END_INTERFACE_MAP()
和
BEGIN_DISPATCH_MAP( CMyDialog, CDialog )
END_DISPATCH_MAP()
并在构造函数调用EnableAutomation();即可。再在BEGIN_DISPATCH_MAP和END_DISPATCH_MAP宏之间加入楼主想加的DISP_FUNCTION之类的宏以建立映射。如果楼主先手动添加DISP_FUNCTION之类的宏麻烦,可如下修改即可使用ClassWizard来对这个类添加方法和属性了
在.cpp中
BEGIN_DISPATCH_MAP( CMyDialog, CDialog )
//{{AFX_DISPATCH_MAP( CMyDialog )
//}}AFX_DISPATCH_MAP
END_DISPATCH_MAP()
在.h中,在类声明中的任何一个地方加入
//{{AFX_DISPATCH( CMyDialog )
//}}AFX_DISPATCH
如上后就可通过ClassWizard来添加方法和属性了