Dela via


Ange en startpunkt

En startpunkt identifierar platsen för en funktion i en DLL. I ett hanterat projekt identifierar det ursprungliga namnet eller den ordningsmässiga startpunkten för en målfunktion den funktionen över gränsen för interoperation. Dessutom kan du mappa startpunkten till ett annat namn och effektivt byta namn på funktionen.

Följande är en lista över möjliga orsaker till att byta namn på en DLL-funktion:

  • Så här undviker du att använda skiftlägeskänsliga API-funktionsnamn

  • Så här följer du befintliga namngivningsstandarder

  • För att hantera funktioner som tar olika datatyper (genom att deklarera flera versioner av samma DLL-funktion)

  • Förenkla användningen av API:er som innehåller ANSI- och Unicode-versioner

Det här avsnittet visar hur du byter namn på en DLL-funktion i hanterad kod.

Byta namn på en funktion i Visual Basic

Visual Basic använder nyckelordet Funktion i instruktionen Deklarera för att ange fältet DllImportAttribute.EntryPoint . I följande exempel visas en grundläggande deklaration.

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

Du kan ersätta startpunkten för MessageBox med MsgBox genom att inkludera nyckelordet Alias i din definition, som du ser i följande exempel. I båda exemplen eliminerar nyckelordet Auto behovet av att ange teckenuppsättningsversionen av startpunkten. Mer information om hur du väljer en teckenuppsättning finns i Ange en teckenuppsättning.

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

Byta namn på en funktion i C# och C++

Du kan använda fältet DllImportAttribute.EntryPoint för att ange en DLL-funktion efter namn eller ordningstal. Om namnet på funktionen i metoddefinitionen är samma som startpunkten i DLL:en behöver du inte uttryckligen identifiera funktionen med fältet EntryPoint . Annars använder du något av följande attributformulär för att ange ett namn eller en ordningspunkt:

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

Observera att du måste prefixa en ordningstal med pundtecknet (#).

I följande exempel visas hur du ersätter MessageBoxA med MsgBox i koden med hjälp av fältet 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);

Se även