none
COM-Events in C# bereitstellen RRS feed

  • Allgemeine Diskussion

  • Hallo Gemeinde!

    Nur eine 'kurze' Frage.
    Ist es möglich für C# COM-Objekte bereitzustellen (entwickelt in C++/ATL), welche NICHT instantiierbar sind, dennoch denen Events (in C#) hinzufügen kann bzw. unterstützen?

    Klingt jetzt vielleicht verwirrend :)
    Vielleicht wird es mit etwas Beispielcode klarer.

    Bei 'öffentlichen' COM-Klassen/Objekten, funktioniert das ja alles prima solange in der .IDL die Klasse als coclass angelegt wurde.

    coclass Sample
    {
    [default] interface ISample;
    [default, source] dispinterface _ISampleEvents;
    };

    Von der Klasse Sample kann in C# schön Objekte anlegen und den Eventhandlern Events hinzufügen.

    Jetzt soll die Klasse 'Sample' allerdings selbst intern ein Objekt anlegen und an den Aufrufer (C#) zurückgeben (nennen wir es mal 'Configuration'). Soweit klappt ja aller wunderbar. Die Eigenschaften eines Konfigurationsobjekts können angesprochen und gesetzt werden und nicht direkt in C# angelegt werden (da nur als Interface in der IDL definiert).

    JETZT soll die Klasse Konfiguration allerdings AUCH Ereignisse anbieten (z.B. Updated). Aber auf der C#-Seite wird das Ereignis nicht als Ereignis erkannt, außer wenn ich auch die Klasse 'Konfiguration' als coclass definiere, was ich aber eigentlich vermeiden möchte, die diese nicht direkt angelegt werden soll.

    Irgendwelche Tipps, Lösungen oder Links für mich?

    Vielen Dank!



    Freitag, 9. März 2018 11:29

Alle Antworten

  • Hallo Michael,

    Da COM-Steuerelementen eine Funktionalität über Schnittstellen immer verfügbar machen, hast Du die Möglichkeit, Methoden auf der Schnittstelle oder direkt auf der COM-Co-Klasse aufzurufen. Eine Co-Klasse macht nur die Mitglieder verfügbar, die über die Standardschnittstelle verfügbar sind. Weitere Informationen findest Du in folgendem Thread:
    Calling Methods, Properties, and Events
    Du hast auch die Möglichkeit, die Methode über eine Schnittstelle und nicht über die COM-Co-Klasse verfügbar zu machen. Siehe hierzu:
    How can a CoClass implement multiple interfaces?
    Exposing managed events to COM using C++

    Gruß,

    Ivan Dragov


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 12. März 2018 12:27
    Administrator