Delen via


Niet-beheerde DLL-functies gebruiken

Platformoproep is een service waarmee beheerde code onbeheerde functies kan aanroepen die zijn geïmplementeerd in DLL's (Dynamic Link Libraries), zoals die in de Windows-API. De functie zoekt en roept een geëxporteerde functie aan en roept de argumenten ervan (gehele getallen, tekenreeksen, matrices, structuren, enzovoort) waar nodig aan over de interoperatiegrens.

In deze sectie worden taken geïntroduceerd die zijn gekoppeld aan het gebruik van niet-beheerde DLL-functies en vindt u meer informatie over het aanroepen van platforms. Naast de volgende taken zijn er algemene overwegingen en een koppeling die aanvullende informatie en voorbeelden biedt.

Geëxporteerde DLL-functies gebruiken

  1. Functies in DLLs identificeren.

    U moet minimaal de naam van de functie en de naam van het DLL-bestand opgeven dat deze bevat.

  2. Maak een klasse voor het opslaan van DLL-functies.

    U kunt een bestaande klasse gebruiken, een afzonderlijke klasse maken voor elke onbeheerde functie of een klasse maken die een set gerelateerde niet-beheerde functies bevat.

  3. Maak prototypen in beheerde code.

    [Visual Basic] Gebruik de Declare instructie met de Function en Lib trefwoorden. In sommige zeldzame gevallen kunt u de DllImportAttribute trefwoorden voor de gedeelde functie gebruiken. Deze gevallen worden verderop in deze sectie uitgelegd.

    [C#] Gebruik de DllImportAttribute functie om het DLL-bestand en de functie te identificeren. Markeer de methode met de static en extern modificeerders.

    [C++] Gebruik de DllImportAttribute functie om het DLL-bestand en de functie te identificeren. Markeer de wrappermethode of -functie met extern C.

  4. Roep een DLL-functie aan.

    Roep de methode aan in uw beheerde klasse, net zoals elke andere beheerde methode. Het doorgeven van structuren en het implementeren van callback-functies zijn speciale gevallen.

Voor voorbeelden die laten zien hoe u .NET-gebaseerde declaraties kunt opstellen voor gebruik met platformaanroepen, zie Marshalling Data with Platform Invoke.

Een nadere blik op platform-aanroepen

Platformaanroep is afhankelijk van metagegevens om geëxporteerde functies te lokaliseren en hun argumenten tijdens runtime te marshallen. In de volgende afbeelding ziet u dit proces.

Diagram dat een platformaanroep toont.

Wanneer het platform een onbeheerde functie aanroept, wordt de volgende reeks acties uitgevoerd:

  1. Zoekt het DLL-bestand met de functie.

  2. Laadt het DLL-bestand in het geheugen.

  3. Hiermee wordt het adres van de functie in het geheugen gevonden en worden de argumenten naar de stack gepusht, waarbij gegevens naar behoefte worden gemarshalled.

    Opmerking

    Het zoeken en laden van het DLL-bestand en het vinden van het adres van de functie in het geheugen vindt alleen plaats bij de eerste aanroep van de functie.

  4. Hiermee wordt het besturingselement overgedragen naar de onbeheerde functie.

Bij platformaanroep werpt de onbeheerde functie uitzonderingen naar de beheerde aanroeper.

Zie ook