activex vc编程问题急问
我有两个activex控件:a.dll,b.dll,其中包含操作这个控件的接口:Ia和Ib
其中b有一个函数:DoSth(IDispatch * para),而para必须是Ia类型接口
在vb中,窗体加两个控件aa和bb,然后由于vb的直接类型转换,
很容易实现:bb.DoSth(aa)
而在vc中,窗体加两个控件aa和bb,
然后必须用classwizard生成封装Ia和Ib的类:Ca和Cb(皆从Cwnd派生)
同时分别有两个变量:m_a,m_b,这时想实现vb中一样的效果而m_b.DoSth(m_a)显示是不可以调用的
我的做法是:
LPDISPATCH pA;
m_a.EnableAutomation();
pA = m_a.GetIDispatch(TRUE);
在debug时总可以看到pA是有效的指针,
但用m_b.DoSth(pA)的时候,总是报参数错误,而尝试用pA去调用Ia本身的函数也皆失败
请问我获取aa的接口的方法是不是错了?应该用什么方法呢?
请各位大虾不吝赐教,谢谢!!!
我有两个activex控件:a.dll,b.dll,其中包含操作这个控件的接口:Ia和Ib
其中b有一个函数:DoSth(IDispatch * para),而para必须是Ia类型接口
在vb中,窗体加两个控件aa和bb,然后由于vb的直接类型转换,
很容易实现:bb.DoSth(aa)
而在vc中,窗体加两个控件aa和bb,
然后必须用classwizard生成封装Ia和Ib的类:Ca和Cb(皆从Cwnd派生)
同时分别有两个变量:m_a,m_b,这时想实现vb中一样的效果而m_b.DoSth(m_a)显示是不可以调用的
我的做法是:
LPDISPATCH pA;
m_a.EnableAutomation();
pA = m_a.GetIDispatch(TRUE);
在debug时总可以看到pA是有效的指针,
但用m_b.DoSth(pA)的时候,总是报参数错误,而尝试用pA去调用Ia本身的函数也皆失败
请问我获取aa的接口的方法是不是错了?应该用什么方法呢?
请各位大虾不吝赐教,谢谢!!!
// on this dialog
CWnd *pWndCal = GetDlgItem(IDC_MSACALCTRL1); // Use the IUnknown of the control
LPUNKNOWN pUnk = pWndCal->GetControlUnknown(); // From there get the IDispatch interface of control
LPDISPATCH pDisp = NULL;
pUnk->QueryInterface(IID_IDispatch, (LPVOID*)&pDisp);用这个方法把A的IDispatch得到,然后传给B