Laden...

COM TypeLibrary in C# .NET Projekt einbinden

Erstellt von maik vor 18 Jahren Letzter Beitrag vor 18 Jahren 3.964 Views
M
maik Themenstarter:in
170 Beiträge seit 2005
vor 18 Jahren
COM TypeLibrary in C# .NET Projekt einbinden

Hallo!

Ich möchte gerne eine COM TypeLibrary in mein C# .NET Projekt einbinden.
Jetzt weiß ich ja, dass das Visual Studio beim Einbinden der Referenz eine Art Datenkapselung vollzieht, damit ich die DLL hinter der TypeLibrary ansprechen kann.
Es ist nur sehr ärgerlich, dass wenn sich irgendwie der Pfadname ändert das Projekt die Referenz nicht mehr findet.
Unter C++ war das gar kein Problem!

#import "Test/test.tlb" rename_namespace("mytest")

Und schon war die COM-Komponente ohne weiteren hick hack eingebunden.

Kann ich sowas mit C# auch machen?

Ihr wärt mir echt ne SUPER Hilfe.
Danke!

S
8.746 Beiträge seit 2005
vor 18 Jahren

Die TLB-Datei wird doch nur beim Erzeugen des COM-Wrappers einmalig angefasst. Insofern besteht die Problematik doch gar nicht, oder hab ich dein Posting mißverstanden?

M
maik Themenstarter:in
170 Beiträge seit 2005
vor 18 Jahren

ah... das heißt er erstellt seine eigene Referenz als Copie und das eigentliche File brauch ich gar nicht mehr?
Das wäre ja wunderbar... nur die DLL ist halt 400 kb groß und die tlb dazu 16 kb. wenn ich es als referenz hinzufüge greift er ja trotzdem auf die dll zu, weil die tlb allein ja nicht reicht, oder missverstehe ich das?

-> ich muss dazu sagen, dass ich zuvor noch nie mit dem studio .net 2003 und c# gearbeitet habe...

S
8.746 Beiträge seit 2005
vor 18 Jahren

Ein COM-Objekt ist ja in Windows registriert, d.h. der Verweis auf die DLL ist in der Registry eingetragen. Der Standort der COM-DLL darf daher nicht verändert werden.

Die TLB-Datei beschreibt das Interface des COM-Objektes. Mittels dieser Beschreibung erzeugt Studio beim Einbinden des COM-Objektes eine .NET-Assembly (DLL), die dem COM-Objekt entspricht und so dem .NET-Programmierer das COM-Objekt als .NET-"Variante" (Wrapper) bereitstellt. Diese Wrapper-DLL findest du dann in den Referenzen des Projektes. Hast du kein Studio, liefert .NET ein Kommandozeilentool mit, womit du diese Wrapper-DLL per Hand erzeugen kannst.

Ist die sogenannte InterOp-DLL einmal erzeugt, hat das TLB seine Schuidigkeit getan und wird in Zukunft nicht mehr benötigt.

M
maik Themenstarter:in
170 Beiträge seit 2005
vor 18 Jahren

das heißt also ich muss die DLL die dahinter liegt nur registrieren und dann findet das programm die dll selbst?
das ist ja genial! vielen dank! das hat mir viele steine vom herzen bröckeln lassen 🙂

ich mach mich dann wieder an die arbeit!

cheers

S
8.746 Beiträge seit 2005
vor 18 Jahren

Richtig. Nur registrierte Objekte wirst du auch im COM-Reiter in Visual Studio entdecken. Erst mit der Registrierung hast du ein richtiges COM-Objekt. Der Witz ist ja, dass ein COM-Objekt allen Anwendungen zur Verfügung stehen soll. Dabei sollen die sich nicht darum kümmern müssen, wo das Ding genau liegt. Darum kümmert sich Windows. Intern wird das COM-Objekt über eine GUID identifiziert, Windows guckt dann in der Registry nach und sucht nach dieser GUID, und kümmert sich auch um das Laden bzw. Auffinden der DLL.

Die Registrierung macht man übrigens mit regsvr32.exe.

M
maik Themenstarter:in
170 Beiträge seit 2005
vor 18 Jahren

also kann ich meinem kunden das projekt ausliefern und muss im prinzip nur ne batch mitliefern die, die DLL in z.b. system32 kopiert und anschließend nen regsvr32 (was ich ja auch schon kanne ;P) ausführt.
anschließend brauch der kunde dann nur noch die EXE, dessen interop DLL und das pdb-file oder?
-> eben alles was im DEBUG Folder drinne ist... ne?

danke

S
8.746 Beiträge seit 2005
vor 18 Jahren

.pdb braucht man nur für das Debugging, brauchst du nicht mit auszuliefern.

Die COM-DLL packst mit in der Installer-Projekt. Dort kann du in den Dateieigeneschaften unter "Register" das automatische Regstrieren veranlassen, Du brauchst also gar nicht mit regsvr32 rumspielen, macht der Installer automatisch für dich.

Im Prinzip musst du in das Installer-Projekt nur die "Primäre Projektausgabe" deines Projektes (das ist im Prinzip alles was in den Output-Ordner steht, also da wo die Exe rumliegt) und eben die COM-DLL (Speicherort am besten system32) reinzupacken. Fertig ist die Installation.

M
maik Themenstarter:in
170 Beiträge seit 2005
vor 18 Jahren

super! und vielen dank für die aufklärung svenson...

cheers
und noch nen schönen arbeits-/schultag