描述:
我在一个MFC ActiveX工程里面,写了多个控件,各控件之间如何传递对象型参数?
是不是一定要做COM或自动化的类型封装?能不能传递指针直接转化成C++对象啊.
想象中是不行的,可用LPDISPATCH传递对象类型太不方便了,而且目标对象的普通
public方法全部不能使用,都得映射成COM方法. 哪位大侠有好的解决办法?
解决方案1:
用全局接口定义你的每个ocx控件接口吧,相当于每个控件定义一个this全局变量,可跨越套间.
初始化:
IGlobalInterfaceTable* GIT;
CoCreateInstance( CLSID_StdGlobalInterfaceTable,
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IGlobalInterfaceTable),
reinterpret_cast< void** >(&GIT) );
保存一个控件接口指针:
DWORD Save(IYourInterface* pI)
{
DWORD pdwCookie = 0;
hr = GIT->RegisterInterfaceInGlobal(
pI, //要保存的接口指针
__uuidof(IYourInterface),
&pdwCookie
);
return pdwCookie;
}
//在另一处读
Read(DWORD cookie,IYourInterface** ppv)
{
HRESULT hr = GIT->GetInterfaceFromGlobal(
cookie,
__uuidof(IYourInterface),
reinterpret_cast< void** >(&ppv)
);
}
这方面的问题我也遇到过,传递指针直接转化成C++对象,这个方法我曾经试过,是行不通的。
后来还是将对象封装成了自动化对象,虽然麻烦一些,但使用时不会出什么问题。
我也想知道有什么更好的方法,关注中!!
如果只传数据,而不调用方法的话,用属性。
如果你需要调用方法,还是自动化吧。
可以写内部接口直接传CWnd指针,但是不能跨套间跨线程
解决方案5:variant
解决方案6:通过控件的属性方式,与调用程序打交道,再跟另一个控件打交道。