Entwickler-Ecke
Basistechnologien - Auf COM Objekt zugreifen in C#
mediaslave - Mo 08.09.08 11:38
Titel: Auf COM Objekt zugreifen in C#
Hallo zusammen,
ich habe gerade mit C# angefangen und habe schon die erste große Hürde zu überwinden.
Ich habe ein COM Objekt (Klassenbibliothek/dll) in C#.
Dieses beinhaltet ganz einfache Funktionen um z.B. den aktuellen Tag anzuzeigen:
Ausschnitt aus meinem COM (dll)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| [Guid("D6F88E95-8A27-4ae6-B6DE-0542A0FC7039")] [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface _Day { [DispId(1)] int GetDay(); }
[Guid("13FE32AD-4BF8-495f-AB4D-6C61BD463EA4")] [ClassInterface(ClassInterfaceType.None)] [ProgId("Tester.Day")] public class Day: _Day { public Numbers(){} public int GetDay() { return(DateTime.Today.Day); } } |
Nun kann ich die .dll aber nicht in meinem kleinen C# Testprogramm verwenden bzw. das Interface ansprechen.
Ich habe über google gesucht wie man auf COM-Objekte zugreift und habe nur Lösungen in C++ oder Visual Basic gefunden.
Brauch das aber für C#. Ich suche noch weiter aber wäre froh wenn mir jemand mal ganz allgemein sagen könnte wie es funktioniert. Ich habe auch was über Assemblys etc. gelesen. Weiss aber nicht genau was ich da beachten sollte, wenn ich die Bibliothek als Referenz einbinden soll.
Ich hoffe ihr könnt mir helfen.
Vielen Dank schon mal im Voraus,
mediaslave
Moderiert von
Christian S.: Code- durch C#-Tags ersetztModeriert von
Christian S.: Topic aus C# - Die Sprache verschoben am Mo 08.09.2008 um 12:04
Christian S. - Mo 08.09.08 12:04
Hallo!
Also wenn Du eine DLL schreiben willst, die nur in C# (und anderen .NET-Sprachen) verwendet werden soll, brauchst Du kein COM.
Du schreibst die Klassen so, als lägen sie in Deinem Hauptprogramm.
Dann fügst Du die Bibliothek zu den Referenzen Deines Hauptprogrammes hinzu (im Solution Explorer Rechtsklick auf Dein Projekt -> Referenz hinzufügen). Dann kannst Du die Klassen der DLL (sofern als public deklariert) so nutzen, als lägen sie in Deinem Hauptprogramm. Das ist wirklich sehr bequem in .NET :-)
Grüße
Christian
mediaslave - Mo 08.09.08 13:00
Hi Christian,
danke für deine schnelle Antwort. Innerhalb meines C# Programms habe ich die Klasse aus der dll schon nutzen können :-).
Ich habe die dll aber dann explizit für COM Interop. freigegeben um zum Beispiel die Operationen auch in einem Yahoo Widget nutzen zu können, die COM unterstützt.
Nun kann ich zwar auf die .dll (registriert in der Windows Registry) in meinem Widget zugreifen (COM.createObject()) aber irgendwie find ich keine Lösung wie ich auf die gleiche .dll über C# zugreifen kann. Die .dll sollte dabei nicht im gleichen Verzeichnis wie meine .exe-Datei liegen, sondern mein Programm soll auch anhand der CLSID die .dll über die Registry finden.
Hast du mir da vielleicht ein paar Zeilen Code wie ich expliziet ein COM Objekt in C# erzeugen kann.
Wäre dir sehr dankbar.
Viele Grüße.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!