Je veux obtenir un bon pointeur IDispatch, puis le cast à CMyDispatch pointeur et de faire mon chemin avec elle plus tard.Puis-je obtenir IDispatch correct de DISPPARAMS?
dire en javascript je veux faire quelque chose comme ceci:
var x = external.obj.x;
var y = external.obj.y;
external.obj.x = y;
où x et y sont des instances de CMyDispatch.
CMyDispatch est retourné à javascript de cette façon:
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;
}
En CMyDispatch.Invoke() avec DISPATCH_PROPERTYPUT drapeau Je veux obtenir CMyDispatch instance qui détient y valeur.
Lorsque vous utilisez le code suivant, pDispatch est réglé sur des ordures:
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;
}
Que dois-je faire pour obtenir le pointeur approprié CMyDispatch? Merci.
Je souhaite pouvoir définir la propriété ** external.obj.x ** sur l'objet ** y **, c'est-à-dire l'implémentation ** IDispatch **. –
et pour ce faire, je dois obtenir une instance de mise en œuvre concrète, l'interface ne suffit pas, si je suis correct. –
J'ai pu obtenir les propriétés nécessaires via ce proxy pDisp-> Invoke(). Ce n'est pas une réponse à la question, mais cela résout un problème qui a soulevé la question. Merci. –