Dela via


Använda ohanterade DLL-funktioner

Plattformsanrop är en tjänst som gör det möjligt för hanterad kod att anropa ohanterade funktioner som implementerats i DLL:er (Dynamic Link Libraries), till exempel de i Windows-API:et. 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.

Det här avsnittet beskriver uppgifter som är associerade med användning av ohanterade DLL-funktioner och innehåller mer information om plattformsanrop. Utöver följande uppgifter finns det allmänna överväganden och en länk som ger ytterligare information och exempel.

Så här använder du exporterade DLL-funktioner

  1. Identifiera funktioner i DLL:er.

    Minimalt måste du ange namnet på funktionen och namnet på den DLL som innehåller den.

  2. Skapa en klass som innehåller DLL-funktioner.

    Du kan använda en befintlig klass, skapa en enskild klass för varje ohanterad funktion eller skapa en klass som innehåller en uppsättning relaterade ohanterade funktioner.

  3. Skapa prototyper i hanterad kod.

    [Visual Basic] Använd instruktionen Deklarera med nyckelorden Funktion och Lib . I vissa sällsynta fall kan du använda DllImportAttribute med nyckelorden Delad funktion . Dessa fall förklaras senare i det här avsnittet.

    [C#] Använd DllImportAttribute för att identifiera DLL och funktionen. Markera metoden med statiska och externa modifierare.

    [C++] Använd DllImportAttribute för att identifiera DLL och funktionen. Markera omslutningsmetoden eller funktionen med externt "C".

  4. Anropa en DLL-funktion.

    Anropa metoden i din hanterade klass på samma sätt som med andra hanterade metoder. Att skicka strukturer och implementera återanropsfunktioner är särskilda fall.

Exempel som visar hur du konstruerar . NET-baserade deklarationer som ska användas med plattformsanrop finns i Marshalling Data with Platform Invoke (Marshalling Data with Platform Invoke).

En närmare titt på plattformsanrop

Plattformsanrop förlitar sig på metadata för att hitta exporterade funktioner och konvertera sina argument vid körning. Följande bild visar den här processen.

Diagram that shows a platform invoke call.

När plattform anropar en ohanterad funktion utför den följande sekvens med åtgärder:

  1. Letar upp DLL-filen som innehåller funktionen.

  2. Läser in DLL:en i minnet.

  3. Letar upp adressen till funktionen i minnet och push-överför dess argument till stacken och samlar data efter behov.

    Kommentar

    Att hitta och läsa in DLL:n och hitta adressen för funktionen i minnet sker endast vid det första anropet till funktionen.

  4. Överför kontrollen till den ohanterade funktionen.

Plattformsanrop genererar undantag som genereras av den ohanterade funktionen till den hanterade anroparen.

Se även