AxtiveX Event

23/11/2008 - 18:59 von Frank M | Report spam
Hallo an alle,
ich starte gerade mit meinen ersten Schritten in C# (komme von VO) und
bin so ein wenig am rumtesten.
Versuche gerade ein ActiveX in C# zu erstellen und in VO zu verwenden.
Mit den Informationen unter:
http://dotnetslackers.com/articles/...Sharp.aspx
klappt das gut, nur leider finde ich keine Informationen wie ich ein
Event einbauen kann.
Wo muss ich da Ansetzen? Bitte für einen C# Anfàngerstatus beachten.

Grüße Frank Müßner
 

Lesen sie die antworten

#1 Christof Wollenhaupt
24/11/2008 - 20:27 | Warnen spam
Hallo Frank,

Ausgehend von Deinem Beispiel mußt Du als erstes eine Schnittstelle für die
Events definieren. Wie unter COM üblich müssen alle Ereignisse in diesem
Interface zusammengefasst werden.

[ComVisible(true)]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
public interface ASignaturesEvents
{
void NameQuery();
}

Anschließend benötigst Du für jedes Event einen Delegaten mit der korrekten
Signatur:

public delegate void NameQueryDelegate();

Über das Attribut ComSourceInterfaces teilst Du dem InterOp Layer mit,
welches Interface als Eventquelle dient:

[ComSourceInterfaces(typeof(ASignaturesEvents))]
[ComVisible(true)]
public class AClass : ASignatures
{

Nun mußt Du für jedes Event im Interface ein Event in der Klasse selbst
definieren. Der Typ ist hierbei oben definierter Delegat. Es bleibt Dir
überlassen, ob Du für jede Methode einen eigenen Delegaten schreibst, oder
ob Du einen Delegaten pro Signatur erstellst, also beispielsweise einen
Delegaten für alle parameterlosen Ereignisse ohne Rückgabewert.

public event NameQueryDelegate NameQuery;

Der Aufruf erfolgt wie mit C# üblich. Hierbei ist dringend zu prüfen, ob der
Delegat überhaupt definiert ist, da anderenfalls ein Fehler ausgelöst wird:

public string FName()
{
if (NameQuery != null)
NameQuery();
return "Imran";
}

Christof

Ähnliche fragen