سؤال

ولقد كتبت عنصر تحكم ActiveX باستخدام ATL. لقد استخدمت المعالج لإضافة دعم لنقاط الاتصال التي أضافت public IConnectionPointContainerImpl<CActiveX> وCProxy_IActiveXEvents<CActiveX>، حيث CProxy_... غير المعالج إنشاء التعليمات البرمجية إطلاق الأحداث.

ولقد تعريف dispinterface كما يلي:

<اقتباس فقرة>   

و[           UUID (43ECB3DF-F004-4FAD-9BFB-79211A693C3A)،           helpstring ( "أحداث اكتف")       ]       _IActiveXEvents dispinterface       {           الخصائص:           طرق:               [معرف (1)] receiveCertificate الفراغ ([في] VARIANT_BOOL isPermissionGranted، [في] BSTR certificateXml)؛       }؛

ووتضمينه في coclass مع [default,source] dispinterface _IActiveXEvents. إطلاق الحدث أدعو Fire_receiveCertificate(isGranted, _bstr_t(certXml.c_str()).copy())، والتي تم تعريفها في المعالج رمز.

ووجافا سكريبت التالية سوف تتلقى الحدث

<اقتباس فقرة>
function ActiveXObject::receiveCertificate(permission, certificate) {
      alert("alert!");
  }

والمشكلة هي أنه لا تتلقى سوى حالة واحدة، وليس لدي لإغلاق وإعادة فتح IE للحصول عليه لاستقبال الحدث مرة أخرى. أنا شيء مفقود؟

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

المحلول

إذا كان أي شخص مهتم، لقد وجدت الحل لهذه المشكلة. أنا سجلت الكائن في ROT (تشغيل كائن جدول)، ولكن لم يكن إلغاء أية تسجيلات موجودة سابقا. وهكذا، تم تسجيل عدة تظهر. مرة واحدة ضمان I إلغاء التسجيلات السابقة، أطلقت الأحداث بشكل موثوق.

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