Setzen Sie VBScript-Benutzern meines COM-Objekts einen Ereignishandler zur Verfügung

8

Angenommen, ich habe ein COM-Objekt, auf das Benutzer über einen Anruf zugreifen können, z. B .:

%Vor%

Was ich gerne tun könnte, ist, dass der Benutzer einen Event-Handler für das Objekt angeben kann:

%Vor%

Ist das möglich, und wenn ja, wie gebe ich das in meiner Typbibliothek in C ++ (speziell BCB 2007) frei?

    
Carl 14.09.2008, 21:57
quelle

3 Antworten

5

So habe ich es kürzlich gemacht. Fügen Sie eine Schnittstelle hinzu, die IDispatch und eine Co-Klasse für diese Schnittstelle zu Ihrer IDL implementiert:

%Vor%

Dies ist die Deklaration der CServerEvents-Klasse:

%Vor%

Der Schlüssel hier ist die Implementierung der IConnectionPointImpl- und IConnectionPointContainerImpl-Schnittstellen und der Verbindungspunktzuordnung. Die Definition der OnServerEvent-Methode sieht folgendermaßen aus:

%Vor%

Sie müssen Ihrem Client eine Möglichkeit geben, seinen Handler für Ihre Ereignisse anzugeben. Sie können dies mit einer dedizierten Methode wie "SetHandler" oder etwas tun, aber ich bevorzuge es, den Handler zu einem Argument für die Methode zu machen, die asynchron aufgerufen wird. Auf diese Weise muss der Benutzer nur eine Methode aufrufen:

%Vor%

Speichern Sie den Zeiger zu den IServerEvents und rufen Sie dann die Methode auf, wenn Sie Ihr Ereignis auslösen möchten:

%Vor%

Wie beim VB-Code unterscheidet sich die Syntax für den Umgang mit Ereignissen etwas von dem, was Sie vorgeschlagen haben:

%Vor%

Ich hoffe, das hilft.

    
Jeff Hillman 15.09.2008 00:40
quelle
2

Ich bin ein wenig verschwommen auf die Details, aber vielleicht hilft der Link unten:

Ссылка

Es sieht so aus, als ob Ihr Serverobjekt IProvideClassInfo implementieren muss und Sie ConnectObject in Ihrem VBScript-Code aufrufen. Siehe auch:

Ссылка

    
1800 INFORMATION 14.09.2008 23:37
quelle
1

Ich folgte der beschriebenen Technik hier .

    
Carl 15.09.2008 22:07
quelle

Tags und Links