Verwenden von COM-Typen in verwaltetem Code
In einer Assembly definierte COM-Typen gleichen anderen verwalteten Typen. Mit verwalteten Clients kann auf herkömmliche Weise eine neue Instanz eines COM-Typs erstellt werden. Wie bei anderen verwalteten Klassen stehen Klasseninformationen durch Metadaten zur Verfügung. Ebenso kann die Methodensyntax durch einen Objektviewer geprüft oder durch Reflektion verfügbar gemacht werden. Wenn vom COM-Objekt ein Fehler-HRESULT zurückgegeben wird, empfängt der .NET Framework-Client eine entsprechende Ausnahme.
Von der Anwendung können Typinformationen, die die Interoperation mit COM-Typen aktivieren, auf zwei Arten eingeschlossen werden:
Verwenden eingebetteter Interop-Typen: Indem Sie mit der .NET Framework, Version 4-Anweisung beginnen, können Sie den Compiler anweisen, Typinformationen von einer Interopassembly in die EXE-Datei einzubetten. Der Compiler bettet nur die Typinformationen ein, die von der Anwendung verwendet werden. Die Interopassembly muss nicht mit der Anwendung bereitgestellt werden. Dies ist das empfohlene Verfahren.
Bereitstellen von Interopassemblys: Sie können einen Standardverweis auf eine Interopassembly erstellen. In diesem Fall muss die Interopassembly mit der Anwendung bereitgestellt werden. Wenn Sie dieses Verfahren und keine private COM-Komponente verwenden, verweisen Sie immer auf die primäre Interopassembly (Primary Interop Assembly, PIA), die vom Verfasser der COM-Komponente, die Sie in den verwalteten Code aufnehmen möchten, veröffentlicht wurde. Weitere Informationen zum Erstellen und Verwenden von primären Interopassemblys finden Sie unter Primäre Interopassemblys.
Hinweis |
---|
Bei der Verwendung eingebetteter Interop-Typen können Sie diese von der primären Interopassembly einbetten, die vom Autor der COM-Komponente veröffentlicht wurde.Die primäre Interopassembly muss jedoch nicht mit der Anwendung bereitgestellt werden. |
Durch die Verwendung eingebetteter Interop-Typen wird die Größe der Anwendung reduziert, da von den meisten Anwendungen nicht alle Funktionen einer COM-Komponente verwendet werden. Der Compiler arbeitet bei der Einbettung von Typinformationen sehr effizient. Werden von der Anwendung nur einige der Methoden für eine COM-Schnittstelle verwendet, werden die nicht verwendeten Methoden vom Compiler nicht eingebettet. Bei der Interaktion einer Anwendung mit eingebetteten Typinformationen mit einer anderen Anwendung, in die Typinformationen eingebettet wurden, oder mit einer Anwendung, die eine primäre Interopassembly verwendet, werden von der Common Language Runtime zur Ermittlung, ob zwei Typen mit dem gleichen Namen den gleichen COM-Typ darstellen, Typäquivalenzregeln verwendet.
Ein Verweis auf ein COM-Objekt, das gerade ausgeführt wird, kann in gleicher Weise abgerufen und freigegeben werden wie bei anderen verwalteten Objekten. Wenn .NET Framework-Clients einen Verweis auf ein COM-Objekt abrufen und freigeben, verwaltet die Common Language Runtime den Verweiszähler für das COM-Objekt in gleicher Weise wie ein beliebiger anderer COM-Client. Das Objekt kann von .NET Framework-Clients für die Garbage Collection berücksichtigt werden wie jedes andere verwaltete Serverobjekt.
Mit Visual Studio können Typinformationen mühelos in Anwendungen oder Add-Ins eingebettet werden. Beispiele zu diesem Thema finden Sie unter Exemplarische Vorgehensweise: Einbetten von Typinformationen aus Microsoft Office-Assemblys (C# und Visual Basic) und Exemplarische Vorgehensweise: Einbetten von Typen aus verwalteten Assemblys (C# und Visual Basic).
Codebeispiele zu den Themen in diesem Abschnitt finden Sie unter COM-Interop-Beispiel: .NET-Client und COM-Server.
Die Regeln für Typäquivalenz werden in Typäquivalenz und eingebettete Interop-Typen erläutert. Zur Verwendung von COM-Objekten ist die Kenntnis dieser Regeln allerdings nicht erforderlich.
Siehe auch
Aufgaben
Exemplarische Vorgehensweise: Einbetten von Typen aus verwalteten Assemblys (C# und Visual Basic)
Konzepte
Verfügbarmachen von COM-Komponenten für .NET Framework
Prüfen einer Assembly auf COM-Typen
Aufrufen von Methoden, Eigenschaften, Ereignissen
Entwurfsüberlegungen für die Interoperation