Delen via


Een toegangspunt opgeven

Een toegangspunt identificeert de locatie van een functie in een DLL. Binnen een beheerd project identificeert het oorspronkelijke naam- of rangschikkingspunt van een doelfunctie die functie over de interoperatiegrens heen loopt. Verder kunt u het ingangspunt toewijzen aan een andere naam, waardoor de naam van de functie effectief wordt aangepast.

Hier volgt een lijst met mogelijke redenen om de naam van een DLL-functie te wijzigen:

  • Om te voorkomen dat hoofdlettergevoelige API-functienamen worden gebruikt

  • Voldoen aan bestaande naamgevingsstandaarden

  • Voor functies die verschillende gegevenstypen gebruiken (door meerdere versies van dezelfde DLL-functie te declareren)

  • Het gebruik van API's met ANSI- en Unicode-versies vereenvoudigen

In dit onderwerp wordt gedemonstreert hoe u de naam van een DLL-functie wijzigt in beheerde code.

De naam van een functie wijzigen in Visual Basic

Visual Basic gebruikt het trefwoord Functie in de declare-instructie om het DllImportAttribute.EntryPoint veld in te stellen. In het volgende voorbeeld ziet u een basisdeclaratie.

Friend Class NativeMethods
    Friend Declare Auto Function MessageBox Lib "user32.dll" (
        ByVal hWnd As IntPtr,
        ByVal lpText As String,
        ByVal lpCaption As String,
        ByVal uType As UInteger) As Integer
End Class

U kunt het toegangspunt messagebox vervangen door MsgBox door het trefwoord Alias in uw definitie op te slaan, zoals wordt weergegeven in het volgende voorbeeld. In beide voorbeelden elimineert het trefwoord automatisch de noodzaak om de tekensetversie van het toegangspunt op te geven. Zie Een tekenset opgeven voor meer informatie over het selecteren van een tekenset.

Friend Class NativeMethods
    Friend Declare Auto Function MsgBox _
        Lib "user32.dll" Alias "MessageBox" (
        ByVal hWnd As IntPtr,
        ByVal lpText As String,
        ByVal lpCaption As String,
        ByVal uType As UInteger) As Integer
End Class

De naam van een functie wijzigen in C# en C++

U kunt het DllImportAttribute.EntryPoint veld gebruiken om een DLL-functie op naam of rangschikk op te geven. Als de naam van de functie in de methodedefinitie hetzelfde is als het toegangspunt in het DLL-bestand, hoeft u de functie niet expliciet te identificeren met het veld EntryPoint . Gebruik anders een van de volgende kenmerkformulieren om een naam of rangtelwoord aan te geven:

[DllImport("DllName", EntryPoint = "Functionname")]
[DllImport("DllName", EntryPoint = "#123")]

U ziet dat u een ordinaal moet voorvoegsel met het hekje (#).

In het volgende voorbeeld ziet u hoe u MessageBoxA vervangt door MsgBox in uw code met behulp van het veld EntryPoint.

using System;
using System.Runtime.InteropServices;

internal static class NativeMethods
{
    [DllImport("user32.dll", EntryPoint = "MessageBoxA")]
    internal static extern int MsgBox(
        IntPtr hWnd, string lpText, string lpCaption, uint uType);
}
using namespace System;
using namespace System::Runtime::InteropServices;

typedef void* HWND;
[DllImport("user32", EntryPoint = "MessageBoxA")]
extern "C" int MsgBox(
    HWND hWnd, String* lpText, String* lpCaption, unsigned int uType);

Zie ook