Autor Beitrag
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Di 11.01.11 15:38 
Hallo,

ich habe einen managed COM Server (C#) und einen unmanaged client (c++).

Die COM-Schnittstelle habe ich anhand msdn.microsoft.com/d...56%28v=vs.71%29.aspx implementiert und mit einem Manifest für registry free com aktiviert ( msdn.microsoft.com/e...ibrary/ms973913.aspx ). Soweit funktioniert auch alles.

Nun möchte ich in meiner verwalteten COM-Komponente ein Event auslösen (z.B. Log für einen neuen LogEintrag). Dafür stellt MSDN wiederum ein Beispiel zur Verfügung ( msdn.microsoft.com/e...ibrary/c3fd4a20.aspx ). Also habe ich besagte Schnittstellen implementiert.

Im C++ Client habe ich ein entsprechende Klasse implementiert und über ConnectionPoint dem Server hinzugefügt.

Mein Problem ist, dass wenn nun das Event ausgelöst wird eine Exception auftritt: "Bibliothek nicht registriert" (Er versucht sie aus der Registry zu lesen).

Wie sag ich dem Server nun, dass er die Klasse bei meinem Client suchen soll? Bzw. was mach ich grundlegend falsch?

Danke schon mal und Gruß
Daniel
danielf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Di 11.01.11 18:06 
Okay, das Problem hat sich erledigt.

Die Lösung ist beim Implementieren des IDistpachImpl für die major und minor Version -1 (0xFFFF) anzugeben. Damit legt man fest, dass der Typ nicht gesucht werden soll, sondern in der DLL definiert ist. Man benötigt deshalb auch noch ein Duplikat des managed Interfaces in dem unmanaged Client. Dies lässt man am einfachsten mit einer IDL-Datei generieren.

Gruß