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 DLL's 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 instructie Declare met de trefwoorden Function en Lib . In sommige zeldzame gevallen kunt u dllImportAttribute gebruiken met de trefwoorden voor gedeeldefuncties . Deze gevallen worden verderop in deze sectie uitgelegd.

    [C#] Gebruik dllImportAttribute om het DLL-bestand en de functie te identificeren. Markeer de methode met de statische en externe modifiers.

    [C++] Gebruik dllImportAttribute 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 kunt bouwen. Declaraties op basis van NET die moeten worden gebruikt met platformaanroepen, zie Marshalling Data with Platform Invoke.

Een beter overzicht van het aanroepen van het platform

Het aanroepen van het platform is afhankelijk van metagegevens om geëxporteerde functies te vinden en hun argumenten tijdens runtime te vinden. In de volgende afbeelding ziet u dit proces.

Diagram that shows a platform invoke call.

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 zoekt u het adres van de functie in het geheugen en pusht u de argumenten naar de stack, waarbij gegevens naar behoefte worden ge marshalld.

    Notitie

    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.

Met het aanroepen van het platform worden uitzonderingen gegenereerd door de onbeheerde functie voor de beheerde aanroeper.

Zie ook