Dela via


Översikt över samverkan

Med samverkan kan du bevara och dra nytta av befintliga investeringar i ohanterad kod. Kod som körs under kontroll av CLR (Common Language Runtime) är hanterad kod och kod som körs utanför CLR är ohanterad kod. COM-, COM+-, C++-komponenter, ActiveX-komponenter och Microsoft Windows API är exempel på ohanterad kod.

.NET möjliggör samverkan med ohanterad kod via plattformsanropstjänster, System.Runtime.InteropServices namnområdet, C++-samverkan och COM-samverkan (COM-interop).

Plattformsanrop

Plattformsanrop är en tjänst som gör det möjligt för hanterad kod att anropa ohanterade funktioner som implementeras i DLL:er (Dynamic Link Libraries), till exempel Microsoft Windows API. Den letar upp och anropar en exporterad funktion och konverterar sina argument (heltal, strängar, matriser, strukturer och så vidare) över gränsen för interoperation efter behov.

Mer information finns i Använda ohanterade DLL-funktioner och Använda plattformsanrop för att spela upp en WAV-fil.

Anmärkning

CLR (Common Language Runtime) hanterar åtkomst till systemresurser. Att anropa ohanterad kod som ligger utanför CLR kringgår den här säkerhetsmekanismen och utgör därför en säkerhetsrisk. Ohanterad kod kan till exempel anropa resurser i ohanterad kod direkt och kringgå CLR-säkerhetsmekanismer. Mer information finns i Säkerhet i .NET.

C++ Interop

Du kan använda C++ interop, även kallat It Just Works (IJW), för att omsluta en intern C++-klass. Med C++ interop kan kod som skapats i C# eller ett annat .NET-språk komma åt den. Du skriver C++-kod för att omsluta en inbyggd DLL- eller COM-komponent. Till skillnad från andra .NET-språk har Visual C++ samverkansstöd som möjliggör hanterad och ohanterad kod i samma program och även i samma fil. Sedan skapar du C++-koden med hjälp av växeln /clr compiler för att skapa en hanterad sammansättning. Slutligen lägger du till en referens till sammansättningen i C#-projektet och använder de omslutna objekten precis som du skulle använda andra hanterade klasser.

Exponera COM-komponenter för C#

Du kan använda en COM-komponent från ett C#-projekt. De allmänna stegen är följande:

  1. Leta upp en COM-komponent som ska användas och registrera den. Använd regsvr32.exe för att registrera eller avregistrera en COM DLL.
  2. Lägg till en referens till COM-komponenten eller typbiblioteket i projektet. När du lägger till referensen använder Visual Studio Tlbimp.exe (Type Library Importer), som tar ett typbibliotek som indata, för att mata ut en .NET-interop-sammansättning. Sammansättningen, som också heter en runtime callable wrapper (RCW), innehåller hanterade klasser och gränssnitt som omsluter COM-klasserna och gränssnitten som finns i typbiblioteket. Visual Studio lägger till en referens till den genererade sammansättningen i projektet.
  3. Skapa en instans av en klass som definierats i RCW. När du skapar en instans av den klassen skapas en instans av COM-objektet.
  4. Använd objektet precis som du använder andra hanterade objekt. När objektet frigörs av skräpinsamling frigörs även instansen av COM-objektet från minnet.

Mer information finns i Exponera COM-komponenter till .NET Framework.

Exponera C# för COM

COM-klienter kan använda C#-typer som har exponerats korrekt. De grundläggande stegen för att exponera C#-typer är följande:

  1. Lägg till interop-attribut i C#-projektet. Du kan göra en sammansättnings-COM synlig genom att ändra C#-projektegenskaper. Mer information finns i dialogrutan Sammansättningsinformation.
  2. Generera ett COM-typbibliotek och registrera det för COM-användning. Du kan ändra C#-projektegenskaper för att automatiskt registrera C#-sammansättningen för COM-interop. Visual Studio använder Regasm.exe (assembly registration tool), med hjälp av /tlb kommandoradsväxeln, som tar en hanterad sammansättning som indata, för att generera ett typbibliotek. Det här typbiblioteket beskriver typerna public i sammansättningen och lägger till registerposter så att COM-klienter kan skapa hanterade klasser.

Mer information finns i Exponera .NET Framework-komponenter för COM och EXEMPEL PÅ COM-klass.

Se även