Angeben eines EinstiegspunktesSpecifying an Entry Point

Ein Einstiegspunkt identifiziert die Position einer Funktion in einer DLL.An entry point identifies the location of a function in a DLL. In einem verwalteten Projekt wird diese Funktion vom ursprünglichen Namen oder vom Ordinaleinstiegspunkt einer Zielfunktion über die Grenzen der Interoperation hinaus identifiziert.Within a managed project, the original name or ordinal entry point of a target function identifies that function across the interoperation boundary. Außerdem können Sie dem Einstiegspunkt einen anderen Namen zuordnen und damit die Funktion umbenennen.Further, you can map the entry point to a different name, effectively renaming the function.

Aus folgenden Gründen kann es sinnvoll sein, eine DLL-Funktion umzubenennen:The following is a list of possible reasons to rename a DLL function:

  • Um keine API-Funktionsnamen zu verwenden, die zwischen Groß- und Kleinschreibung unterscheiden.To avoid using case-sensitive API function names

  • Um die Konventionen vorhandener Namensstandards einzuhalten.To comply with existing naming standards

  • Um Funktionen aufzunehmen, die verschiedene Datentypen verwenden (indem mehrere Versionen derselben DLL-Funktion deklariert werden).To accommodate functions that take different data types (by declaring multiple versions of the same DLL function)

  • Um die Verwendung von APIs zu vereinfachen, die ANSI- und Unicode-Versionen enthalten.To simplify using APIs that contain ANSI and Unicode versions

In diesem Abschnitt wird das Umbenennen einer DLL-Funktion in verwaltetem Code veranschaulicht.This topic demonstrates how to rename a DLL function in managed code.

Umbenennen einer Funktion in Visual BasicRenaming a Function in Visual Basic

Visual Basic verwendet das Function-Schlüsselwort in der Declare-Anweisung, um dasDllImportAttribute.EntryPoint-Feld festzulegen.Visual Basic uses the Function keyword in the Declare statement to set the DllImportAttribute.EntryPoint field. Das folgende Beispiel zeigt eine Basisdeklaration.The following example shows a basic declaration.

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

Sie können den MessageBox-Einstiegspunkt durch MsgBox ersetzen, indem Sie das Alias-Schlüsselwort wie im folgenden Beispiel dargestellt in die Definition aufnehmen.You can replace the MessageBox entry point with MsgBox by including the Alias keyword in your definition, as shown in the following example. In beiden Beispielen erübrigt sich aufgrund des Auto-Schlüsselwortes die Angabe der Zeichensatzversion des Einstiegspunktes.In both examples the Auto keyword eliminates the need to specify the character-set version of the entry point. Weitere Informationen zum Auswählen eines Zeichensatzes finden Sie unter Angeben eines Zeichensatzes.For more information about selecting a character set, see Specifying a Character Set.

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

Umbenennen einer Funktion in C# und C++Renaming a Function in C# and C++

Sie können das DllImportAttribute.EntryPoint-Feld verwenden, um eine DLL-Funktion nach Name oder Ordinalzahl anzugeben.You can use the DllImportAttribute.EntryPoint field to specify a DLL function by name or ordinal. Wenn der Name der Funktion in der Methodendefinition mit dem Einstiegspunkt in der DLL übereinstimmt, müssen Sie die Funktion nicht explizit mit dem EntryPoint-Feld identifizieren.If the name of the function in your method definition is the same as the entry point in the DLL, you do not have to explicitly identify the function with the EntryPoint field. Andernfalls verwenden Sie eine der folgenden Attributformen zur Angabe eines Namens oder einer Ordinalzahl:Otherwise, use one of the following attribute forms to indicate a name or ordinal:

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

Hinweis: Für eine Ordinalzahl müssen Sie das Pfundzeichen (#) als Präfix verwenden.Notice that you must prefix an ordinal with the pound sign (#).

Im folgenden Beispiel wird veranschaulicht, wie Sie im Code MessageBoxA mit MsgBox ersetzen, indem Sie das EntryPoint-Feld verwenden.The following example demonstrates how to replace MessageBoxA with MsgBox in your code by using the EntryPoint field.

using System;
using System.Runtime.InteropServices;

internal static class NativeMethods
{
    [DllImport("user32.dll", EntryPoint = "MessageBoxA")]
    internal static extern int MessageBox(
        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);

Siehe auchSee also