Dela via


Importera ett typbibliotek som en sammansättning

COM-typdefinitioner finns vanligtvis i ett typbibliotek. Däremot skapar CLS-kompatibla kompilatorer typmetadata i en sammansättning. De två källorna av typen information är helt olika. Det här avsnittet beskriver tekniker för att generera metadata från ett typbibliotek. Den resulterande sammansättningen kallas för en interop-sammansättning och den typinformation som den innehåller gör att .NET Framework-program kan använda COM-typer.

Det finns två sätt att göra den här typen av information tillgänglig för ditt program:

  • Använda interop-sammansättningar med endast designtid: Från och med .NET Framework 4 kan du instruera kompilatorn att bädda in typinformation från interop-sammansättningen i din körbara fil. Kompilatorn bäddar bara in den typinformation som programmet använder. Du behöver inte distribuera interop-sammansättningen med ditt program. Detta är den rekommenderade tekniken.

  • Distribuera interop-sammansättningar: Du kan skapa en standardreferens till interop-sammansättningen. I det här fallet måste interop-sammansättningen distribueras med ditt program. Om du använder den här tekniken och inte använder en privat COM-komponent ska du alltid referera till den primära interopsammansättningen (PIA) som publicerats av författaren till COM-komponenten som du tänker införliva i din hanterade kod. Mer information om hur du skapar och använder primära interop-sammansättningar finns i Primära Interop-sammansättningar.

När du använder interop-sammansättningar med endast designtid kan du bädda in typinformation från den primära interop-sammansättningen som publicerats av författaren till COM-komponenten. Du behöver dock inte distribuera den primära interop-sammansättningen med ditt program.

Om du använder interop-sammansättningar med endast designtid minskar storleken på ditt program, eftersom de flesta program inte använder alla funktioner i en COM-komponent. Kompilatorn är mycket effektiv när den bäddar in typinformation. Om ditt program bara använder några av metoderna i ett COM-gränssnitt bäddar kompilatorn inte in de oanvända metoderna. När ett program med inbäddad typinformation interagerar med ett annat sådant program, eller interagerar med ett program som använder en primär interop-sammansättning, använder common language runtime typjämförelseregler för att avgöra om två typer med samma namn representerar samma COM-typ. Du behöver inte känna till dessa regler för att använda COM-objekt. Men om du är intresserad av reglerna kan du läsa Typ av ekvivalens och Inbäddade interoptyper.

Generera metadata

COM-typbibliotek kan vara fristående filer som har ett .tlb-tillägg, till exempel Loanlib.tlb. Vissa typbibliotek är inbäddade i resursavsnittet i en .dll- eller .exe-fil. Andra källor av typen biblioteksinformation är .olb- och .ocx-filer.

När du har hittat typbiblioteket som innehåller implementeringen av din COM-måltyp har du följande alternativ för att generera en interop-sammansättning som innehåller typmetadata:

  • Visual Studio

    Visual Studio konverterar automatiskt COM-typer i ett typbibliotek till metadata i en sammansättning. Anvisningar finns i Så här lägger du till referenser till typbibliotek.

  • Typbiblioteksimportör (Tlbimp.exe)

    Importören för typbiblioteket innehåller kommandoradsalternativ för att justera metadata i den resulterande interop-filen, importerar typer från ett befintligt typbibliotek och genererar en interop-sammansättning och ett namnområde. Instruktioner finns i Så här: Generera Interop-sammansättningar från typbibliotek.

  • System.Runtime.InteropServices.TypeLibConverter Klass

    Den här klassen innehåller metoder för att konvertera samklasser och gränssnitt i ett typbibliotek till metadata i en sammansättning. Den genererar samma metadatautdata som Tlbimp.exe. Men till skillnad från Tlbimp.exe TypeLibConverter kan klassen konvertera ett bibliotek av minnesintern typ till metadata.

  • Anpassade omslutningar

    När ett typbibliotek inte är tillgängligt eller felaktigt är ett alternativ att skapa en duplicerad definition av klassen eller gränssnittet i hanterad källkod. Sedan kompilerar du källkoden med en kompilator som riktar sig mot körningen för att skapa metadata i en sammansättning.

    Om du vill definiera COM-typer manuellt måste du ha åtkomst till följande objekt:

    • Exakta beskrivningar av de samklasser och gränssnitt som definieras.

    • En kompilator, till exempel C#-kompilatorn, som kan generera lämpliga klassdefinitioner för .NET Framework.

    • Kunskap om typ av konverteringsregler för bibliotek till sammansättning.

    Att skriva en anpassad omslutning är en avancerad teknik. Mer information om hur du genererar en anpassad omslutning finns i Anpassa standardomslutningar.

Mer information om COM-interopimportprocessen finns i Type Library to Assembly Conversion Summary (Typbibliotek till sammansättningskonverteringssammanfattning).

Se även