Laden...

OLE Anbindung unter C#.NET

Erstellt von marcelhazrat vor 18 Jahren Letzter Beitrag vor 18 Jahren 3.381 Views
M
marcelhazrat Themenstarter:in
3 Beiträge seit 2005
vor 18 Jahren
OLE Anbindung unter C#.NET

Hallo zusammen,

ich habe folgendes Problem:
Ein bestehendes VBA-Addin für Excel soll portiert werden auf C# (COM-Addin).

In dem VBA-Addin wird ein OLE-Objekt instanziiert mit
Set FDBOLE = CreateObject("fdbole.document")

wie kann ich sowas in C# machen? Hier scheint es etwas vergleichbares wie CreateObject nicht zu geben? Wie kann ich ein OLE-Objekt instanziieren?

Vielen Dank für Eure Hilfe!

Marcel Hazrat

S
8.746 Beiträge seit 2005
vor 18 Jahren

Prinzipiell funktioniert das so, dass du die COM-Library in die Refrenzen des Visual Studio-Projektes einbindest.

Dabei wird eine WrapperKlasse für das COM-Objekt in C# erzeugt. Es wird ein Namespace (vermutlich was mit fdbole) erzeugt, den du über using einbinden mußt. Über den Klassen-Explorer kannst du sehen, welche Interfaces das COM-Objekt bereitstellt.

Diese Klasse kannst du wie eine ganz normalen C#-Klasse nutzen.

MeineOleKlasse oleObject = new MeineOleKlasse();
M
marcelhazrat Themenstarter:in
3 Beiträge seit 2005
vor 18 Jahren
Interop/ Marshalling Probleme

Hallo,
danke für Deine Antwort....das hatte ich inzwischen auch rausgefunden und ich habe es auch schon fleißig eingesetzt. Allerdings hat es am Ende doch nicht funktioniert. Der angeschlossene OLE-Server hat einige hundert Felder. Manche von Ihnen werden korrekt übertragen, andere vom gleichen Typ (z.B. string) nicht. Es treten verschiedene Interop.Execptions und TypeCast.Execptions auf.

Ich habe auch versucht, die Primary Interop Assembly manuell zu erstellen. tlbimp.exe und dann durch den Disassembler. Dann stand ich vor 8400 Zeilen Code, in dem ich zudem auch keine offensichtlichen Probleme bei den Typumwandlungen feststellen konnte.

Bin jetzt umgeschwenkt und programmiere den OLE-Anschluss unter VB.NET und unmanaged. Das ist zwar nicht so cool, funktioniert aber. 😁

Beste Grüße,
Marcel