2009-10-25 3 views
1

J'ai écrit un contrôle ActiveX en utilisant ATL. J'ai utilisé l'assistant pour ajouter le support pour les points de connexion qui ont ajouté public IConnectionPointContainerImpl<CActiveX> et CProxy_IActiveXEvents<CActiveX>, où CProxy_... est le code généré par l'assistant pour déclencher des événements.Javascript ne reçoit qu'une seule fois l'événement ActiveX

J'ai défini un dispinterface comme suit:

[ UUID (43ECB3DF-F004-4FAD-9BFB-79211A693C3A), helpstring ("Événements ActiveX") ] dispinterface de _IActiveXEvents { propriétés: méthodes: [id (1)] void receiveCertificate ([en] VARIANT_BOOL isPermissionGranted, [en] BSTR certificateXml); };

et l'a inclus dans la coclasse avec [default,source] dispinterface _IActiveXEvents. Pour déclencher l'événement, appelez le Fire_receiveCertificate(isGranted, _bstr_t(certXml.c_str()).copy()), qui est défini dans le code de l'assistant.

ci-dessous Javascript recevra l'événement

function ActiveXObject::receiveCertificate(permission, certificate) { 
     alert("alert!"); 
    } 

Le problème est qu'il ne reçoit que l'événement une fois, et je dois fermer et rouvrir IE pour obtenir de recevoir à nouveau l'événement. Est-ce que je manque quelque chose?

Répondre

1

Si quelqu'un est intéressé, j'ai trouvé la solution à ce problème. J'avais enregistré l'objet dans le ROT (table des objets en cours d'exécution), mais ne révoquais pas les enregistrements existants. Ainsi, plusieurs enregistrements apparaissaient. Une fois que je me suis assuré que j'ai révoqué les inscriptions précédentes, les événements ont tiré de façon fiable.

Questions connexes