Primary Interop
Assembly (PIA) ist ein
RCW von einem Hersteller. Er muss vom Hersteller signiert sein.
Somit ist eine PIA ein „Offizieller“
RCW. Eine PIA ist mit mit [PrimaryInterop
AssemblyAttribute] annotiert
Hersteller: tlbimp tlbfile /primary /keyfile:filename /out:assemblyname
Nutzer:
Registrierung mit regasm xy.dll bzw. setzen einer Referenz in Visual Studio
Visual Studio sucht beim referenzieren von
COM-Komponenten erst nach der PIA
Details: Interoperabilität zu COM
.NET-Komponenten können
COM-Komponenten nutzen. Andersherum kann eine .NET-Anwendung auch als
COM-Komponente aufgerufen werden. Die Vermittlung zwischen COM und .NET ist gelöst durch
Proxy-
Objekte.
COM-Komponenten werden von .NET aus über einen sogenannten
Runtime Callable Wrapper (
RCW) angesprochen. Der
RCW setzt die
COM-Schnittstellen in .NET-kompatible Schnittstellen um. Wenn ein Hersteller für eine
COM-Komponente einen
RCW mitliefert, dann spricht man von einer Primary Interop
Assembly (PIA).
Ein
RCW kann erstellt werden mit dem Kommandozeilenwerkzeug tlbimp.exe aus dem
.NET Framework SDK oder durch Generierung einer Referenz auf eine
COM-Komponente in einem Visual Studio-Projekt. Eingabe für tlbimp.exe kann eine COM-
DLL / -
EXE mit integrierter
Typbibliothek oder eine eigenständige COM-
Typbibliothek (.tlb-Datei) sein.
.NET-Komponenten werden von COM-Clients über einen
COM Callable Wrapper (
CCW) angesprochen. Normalerweise stellen die .NET-Entwicklungswerkzeuge einen
CCW automatisch zur Verfügung. Ein
CCW kann aber auch selbst entwickelt werden. Ein
CCW kann mit tlbexp.exe erstellt werden.
Die Interoperabilität zu COM wurde mit
.NET 2.0 verbessert durch den vereinfachten Umfang mit Funk¬tionszeigern und Arrays.
“NoPIA”
Neu ist
.NET 4.0 ist, dass man den
RCW-Code direkt in die aufrufende
Assembly integrieren. Wrapper-Assemblies bzw. PIAs entfallen dann.
Visual Studio 2010 standardmäßig die benötigen Informationen über die referenzierte
COM-Bibliothek direkt in die aktuelle
Assembly, wobei dabei eine Beschränkung auf jene Aspekte, welche von dieser auch wirklich verwendet werden, stattfindet. Um dies zu verhindern und somit die Erstellung von PIAs zu veranlassen, ist die Eigenschaft Embed Interop Types bei den hinzugefügten COM- Bibliotheken auf false zu setzen. Microsoft nennt diese neue Funktion „Embedded Types“ oder “NoPIA”.