我可以从DISPPARAMS适当的IDispatch?
题
我希望得到一个合适的的IDispatch 指针,然后将它转换为 CMyDispatch 指针和有我的方式使用它以后。
即。在JavaScript我想做的事情是这样的:
var x = external.obj.x;
var y = external.obj.y;
external.obj.x = y;
,其中<强> X 和<强>ý强>是的实例的 CMyDispatch 强>
<强> CMyDispatch 强>返回到的JavaScript这样:
STDMETHODIMP CMyDispatch::Invoke(DISPID dispIdMember, REFIID, LCID, WORD wFlags,
DISPPARAMS* pDispParams, VARIANT* pVarResult,
EXCEPINFO*, UINT*) {
if( pVarResult )
{
CMyDispatch* pDisp = new CMyDispatch();
CComVariant val( pDisp );
val.Detach( pVarResult );
}
return S_OK;
}
在的 CMyDispatch.Invoke()强>使用的 DISPATCH_PROPERTYPUT 强>标志我想获得的 CMyDispatch 强>实例,其保持的ý强>值
当使用下面的代码,的 pDispatch 强>设置为一些垃圾:
STDMETHODIMP CMyDispatch::Invoke(DISPID dispIdMember, REFIID, LCID, WORD wFlags,
DISPPARAMS* pDispParams, VARIANT* pVarResult,
EXCEPINFO*, UINT*) {
ASSERT( pDispParams->cArgs == 1 );
ASSERT( VT_DISPATCH == pDispParams->rgvarg[0].vt );
IDispatch* pDisp = ( pDispParams->rgvarg[0].pdispVal ); // <-- garbage
CMyDispatch* pDispatch = (CMyDispatch*) pDisp; // <-- garbage
return S_OK;
}
我应该怎么做才能得到适当的 CMyDispatch 指针? 谢谢你。
解决方案
您真的不应该,从一个具体实施的接口向下转型是走向毁灭的第一步。
这是说,你在做什么应该工作,除非javascript和在不同的公寓COM对象来看,你会得到一个代理传递给你,而不是真正的对象。
为什么你需要向下转型?
不隶属于 StackOverflow