هل يمكنني الحصول على IDispatch مناسبة من المنضار؟

StackOverflow https://stackoverflow.com/questions/1139510

  •  16-09-2019
  •  | 
  •  

سؤال

أريد الحصول على مناسب idispatch. مؤشر ثم يلقي ذلك cmydispatch. مؤشر ولها طريقي معها في وقت لاحق.

أي في جافا سكريبت أريد أن أفعل شيئا مثل هذا:

var x = external.obj.x;
var y = external.obj.y;
external.obj.x = y;

أين عاشر و Y. هي مثيلات cmydispatch..

cmydispatch. يتم إرجاعها إلى جافا سكريبت بهذه الطريقة:

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. المثال الذي يحمل Y. القيمة.

عند استخدام التعليمات البرمجية التالية، 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. مؤشر؟ شكرا لك.

هل كانت مفيدة؟

المحلول

أنت حقا يجب أن لا، من الواجهة من واجهة لتنفيذ الخرسانة هي الخطوة الأولى على الطريق إلى الموت.

ومع ذلك، ما تفعله يجب أن تعمل، ما لم يتم تشغيل جافا سكريبت وكائن COM في شقق مختلفة، وتحصل على وكيل مرت إليك، بدلا من الكائن الحقيقي.

لماذا تحتاج إلى downcast؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top