Autor Beitrag
mediaslave
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 08.09.08 11:38 
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:

ausblenden 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 user profile iconChristian S.: Code- durch C#-Tags ersetzt
Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Mo 08.09.2008 um 12:04
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
mediaslave Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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.