Een typebibliotheek importeren als een assembly
COM-typedefinities bevinden zich meestal in een typebibliotheek. Cls-compatibele compilers produceren daarentegen metagegevens van het type in een assembly. De twee bronnen van het type informatie zijn heel anders. In dit onderwerp worden technieken beschreven voor het genereren van metagegevens uit een typebibliotheek. De resulterende assembly wordt een interop-assembly genoemd en de typeinformatie die deze bevat, stelt .NET Framework-toepassingen in staat COM-typen te gebruiken.
Er zijn twee manieren om dit type informatie beschikbaar te maken voor uw toepassing:
Met behulp van assembly's met alleen ontwerptijd: Vanaf .NET Framework 4 kunt u de compiler instrueren om typegegevens van de interop-assembly in te sluiten in uw uitvoerbare bestand. De compiler sluit alleen de typegegevens in die door uw toepassing worden gebruikt. U hoeft de interop-assembly niet met uw toepassing te implementeren. Dit is de aanbevolen techniek.
Interop-assembly's implementeren: u kunt een standaardverwijzing maken naar de interop-assembly. In dit geval moet de interop-assembly worden geïmplementeerd met uw toepassing. Als u deze techniek gebruikt en u geen privé-COM-onderdeel gebruikt, verwijst u altijd naar de primaire interopassembly (PIA) die is gepubliceerd door de auteur van het COM-onderdeel dat u in uw beheerde code wilt opnemen. Zie Primaire interop-assembly's voor meer informatie over het produceren en gebruiken van primaire interop-assembly's.
Wanneer u ontwerp-time-only interop-assembly's gebruikt, kunt u typegegevens insluiten uit de primaire interop-assembly die is gepubliceerd door de auteur van het COM-onderdeel. U hoeft echter niet de primaire interop-assembly met uw toepassing te implementeren.
Het gebruik van interop-assembly's met alleen ontwerptijd vermindert de grootte van uw toepassing, omdat de meeste toepassingen niet alle functies van een COM-onderdeel gebruiken. De compiler is zeer efficiënt wanneer het type informatie insluit; als uw toepassing slechts een deel van de methoden op een COM-interface gebruikt, sluit de compiler de ongebruikte methoden niet in. Wanneer een toepassing met ingesloten typegegevens communiceert met een andere dergelijke toepassing of communiceert met een toepassing die gebruikmaakt van een primaire interop-assembly, gebruikt de algemene taalruntime equivalentieregels om te bepalen of twee typen met dezelfde naam hetzelfde COM-type vertegenwoordigen. U hoeft deze regels niet te kennen om COM-objecten te gebruiken. Als u echter geïnteresseerd bent in de regels, raadpleegt u Type equivalentie en ingesloten interoptypen.
Metagegevens genereren
COM-typebibliotheken kunnen zelfstandige bestanden zijn met de extensie .tlb, zoals Loanlib.tlb. Sommige typebibliotheken worden ingesloten in de resourcesectie van een .dll- of .exe-bestand. Andere bronnen van typebibliotheekinformatie zijn OLB- en .ocx-bestanden.
Nadat u de typebibliotheek hebt gevonden die de implementatie van uw doel-COM-type bevat, hebt u de volgende opties voor het genereren van een interop-assembly met metagegevens van het type:
Visual Studio
Visual Studio converteert automatisch COM-typen in een typebibliotheek naar metagegevens in een assembly. Zie Instructies: Verwijzingen toevoegen aan typebibliotheken.
Type Library Importer (Tlbimp.exe)
Type Library Importer biedt opdrachtregelopties voor het aanpassen van metagegevens in het resulterende interoperabiliteitsbestand, het importeren van typen uit een bestaande typebibliotheek en het genereren van een interoperabiliteitsassembly en een naamruimte. Zie Procedure: Interop-assembly's genereren vanuit typebibliotheken voor instructies.
System.Runtime.InteropServices.TypeLibConverter Klasse
Deze klasse biedt methoden voor het converteren van coklassen en interfaces in een typebibliotheek naar metagegevens binnen een assembly. Het produceert dezelfde metagegevensuitvoer als Tlbimp.exe. In tegenstelling tot Tlbimp.exe kan de TypeLibConverter klasse echter een bibliotheek van het type in het geheugen converteren naar metagegevens.
Aangepaste wrappers
Wanneer een typebibliotheek niet beschikbaar of onjuist is, kunt u een dubbele definitie van de klasse of interface in beheerde broncode maken. Vervolgens compileert u de broncode met een compiler die gericht is op de runtime om metagegevens in een assembly te produceren.
Als u COM-typen handmatig wilt definiëren, moet u toegang hebben tot de volgende items:
Nauwkeurige beschrijvingen van de coklassen en interfaces die worden gedefinieerd.
Een compiler, zoals de C#-compiler, die de juiste .NET Framework-klassedefinities kan genereren.
Kennis van de conversieregels van het type bibliotheek naar assembly.
Het schrijven van een aangepaste wrapper is een geavanceerde techniek. Zie Standaardwikkelaars aanpassen voor meer informatie over het genereren van een aangepaste wrapper.
Zie Typebibliotheek naar assemblyconversieoverzicht voor meer informatie over het COM-interop-importproces.
Zie ook
- TypeLibConverter
- COM-onderdelen beschikbaar maken voor .NET Framework
- Samenvatting van typebibliotheek naar assemblyconversie
- Tlbimp.exe (Type Bibliotheekimporteur)
- Standaardwikkelaars aanpassen
- COM-typen gebruiken in beheerde code
- Een Interop-project compileren
- Een interoperabiliteitstoepassing implementeren
- Procedure: Verwijzingen toevoegen aan typebibliotheken
- Procedure: Interop-assembly's genereren op basis van typebibliotheken