Freigeben über


Importieren einer Typbibliothek als Assembly

COM-Typdefinitionen befinden sich in der Regel in einer Typbibliothek. Im Gegensatz dazu erzeugen CLS-kompatible Compiler Typmetadaten in einer Assembly. Die beiden Informationstypquellen sind ziemlich unterschiedlich. In diesem Thema werden Techniken zum Generieren von Metadaten aus einer Typbibliothek beschrieben. Die resultierende Assembly wird als Interopassembly bezeichnet, und die darin enthaltenen Typinformationen ermöglichen .NET Framework-Anwendungen die Verwendung von COM-Typen.

Es gibt zwei Möglichkeiten, diese Typinformationen für Ihre Anwendung verfügbar zu machen:

  • Mithilfe der Interopassemblys, die nur zur Entwurfszeit verwendet werden: Ab .NET Framework 4 können Sie den Compiler anweisen, die Typinformationen aus der Interopassembly in die ausführbare Datei einzubetten. Der Compiler bettet nur die Typinformationen ein, die Ihre Anwendung verwendet. Sie müssen die Interop-Assembly nicht mit Ihrer Anwendung bereitstellen. Dies ist die empfohlene Technik.

  • Bereitstellen von Interop-Assemblys: Sie können einen Standardverweis auf die Interop-Assembly erstellen. In diesem Fall muss die Interop-Assembly mit Ihrer Anwendung bereitgestellt werden. Wenn Sie diese Technik verwenden und keine private COM-Komponente verwenden, verweisen Sie immer auf die primäre Interopassembly (PIA), die vom Autor der COM-Komponente veröffentlicht wurde, die Sie in Ihren verwalteten Code integrieren möchten. Weitere Informationen zum Erstellen und Verwenden von primären Interop-Assemblys finden Sie unter Primäre Interop-Assemblys.

Wenn Sie Interop-Assemblys nur zur Entwurfszeit verwenden, können Sie Typinformationen aus der primären Interop-Assembly einbetten, die vom Autor der COM-Komponente veröffentlicht wurden. Sie müssen jedoch die primäre Interop-Assembly nicht mit Ihrer Anwendung bereitstellen.

Das Verwenden von Interop-Assemblys nur zur Entwurfszeit reduziert die Größe Ihrer Anwendung, da die meisten Anwendungen nicht alle Funktionen einer COM-Komponente verwenden. Der Compiler ist sehr effizient, wenn er Typinformationen einbettet. wenn Ihre Anwendung nur einige der Methoden auf einer COM-Schnittstelle verwendet, bettet der Compiler die nicht verwendeten Methoden nicht ein. Wenn eine Anwendung mit eingebetteten Typinformationen mit einer anderen solchen Anwendung interagiert oder mit einer Anwendung interopiert, die eine primäre Interopassembly verwendet, verwendet die Common Language Runtime Typäquivalenzregeln, um zu bestimmen, ob zwei Typen mit demselben Namen denselben COM-Typ darstellen. Sie müssen diese Regeln nicht kennen, um COM-Objekte zu verwenden. Wenn Sie jedoch an den Regeln interessiert sind, lesen Sie "Type Equivalence" und "Embedded Interop Types".

Generieren von Metadaten

COM-Typbibliotheken können eigenständige Dateien sein, die eine TLB-Erweiterung haben, z. B. Loanlib.tlb. Einige Typbibliotheken sind in den Ressourcenabschnitt einer .dll- oder .exe-Datei eingebettet. Andere Quellen von Typbibliotheksinformationen sind OLB- und OCX-Dateien.

Nachdem Sie die Typbibliothek gefunden haben, die die Implementierung Ihres COM-Zieltyps enthält, haben Sie die folgenden Optionen zum Generieren einer Interopassembly, die Typmetadaten enthält:

  • Visual Studio

    Visual Studio konvertiert COM-Typen in einer Typbibliothek automatisch in Metadaten in einer Assembly. Anweisungen finden Sie unter So fügen Sie Verweise auf Typbibliotheken hinzu (How to: Add References to Type Libraries).

  • Type Library Importer (Tlbimp.exe)

    Der Typbibliotheksimporteur bietet Befehlszeilenoptionen zum Anpassen von Metadaten in der resultierenden Interopdatei, importiert Typen aus einer vorhandenen Typbibliothek und generiert eine Interopassembly und einen Namespace. Anweisungen finden Sie unter So geht's: Interop-Assemblys aus Typbibliotheken generieren.

  • System.Runtime.InteropServices.TypeLibConverter-Klasse

    Diese Klasse stellt Methoden zum Konvertieren von Coklassen und Schnittstellen in einer Typbibliothek in Metadaten innerhalb einer Assembly bereit. Es erzeugt die gleiche Metadatenausgabe wie Tlbimp.exe. Im Gegensatz zu Tlbimp.exekann die TypeLibConverter Klasse jedoch eine Speichertypbibliothek in Metadaten konvertieren.

  • Benutzerdefinierte Wrapper

    Wenn eine Typbibliothek nicht verfügbar oder falsch ist, besteht eine Option darin, eine doppelte Definition der Klasse oder Schnittstelle im verwalteten Quellcode zu erstellen. Anschließend kompilieren Sie den Quellcode mit einem Compiler, der auf die Laufzeit abzielt, um Metadaten in einer Assembly zu erzeugen.

    Um COM-Typen manuell zu definieren, müssen Sie Zugriff auf die folgenden Elemente haben:

    • Genaue Beschreibungen der zu definierenden Coklassen und Schnittstellen.

    • Ein Compiler, z. B. der C#-Compiler, der die entsprechenden .NET Framework-Klassendefinitionen generieren kann.

    • Kenntnisse der Konvertierungsregeln einer Typbibliothek in eine Assembly.

    Das Schreiben eines benutzerdefinierten Wrappers ist ein erweitertes Verfahren. Weitere Informationen zum Generieren eines benutzerdefinierten Wrappers finden Sie unter Anpassen von Standardwrappern.

Weitere Informationen zum COM-Interop-Importvorgang finden Sie unter Zusammenfassung: Konvertieren einer Typbibliothek in eine Assembly.

Siehe auch