私は適切なIDispatchポインターをしたいと思ってのCMyDispatchポインターにキャストし、後で私の方法があります。DISPPARAMSから適切なIDispatchを取得できますか?
つまり、私はこのような何かをしたいJavaScriptで:
var x = external.obj.x;
var y = external.obj.y;
external.obj.x = y;
XとYはCMyDispatchのインスタンスです。私はY値を保持しているCMyDispatchインスタンスを取得したいDISPATCH_PROPERTYPUTフラグでCMyDispatch.Invoke()で
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はjavascriptをこのように返されます。次のコードを使用している場合
、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ポインタを適切に取得するにはどうすればよいですか? ありがとうございます。
** external.obj.x **プロパティを** y **オブジェクトに設定できるようにしたい、つまり** IDispatch **の実装です。 –
それを行うには、私は正しい場合、具体的な実装インスタンスを取得する必要があります、インターフェイスは十分ではありません。 –
私はこのプロキシpDisp-> Invoke()を介して必要なプロパティを取得することができました。それは質問に対する答えではありませんが、問題を提起した問題を解決します。 ありがとうございます。 –