Angeben eines Einstiegspunktes

Ein Einstiegspunkt identifiziert die Position einer Funktion in einer DLL. In einem verwalteten Projekt wird diese Funktion vom ursprünglichen Namen oder vom Ordinaleinstiegspunkt einer Zielfunktion über die Grenzen der Interoperation hinaus identifiziert. Außerdem können Sie dem Einstiegspunkt einen anderen Namen zuordnen und damit die Funktion umbenennen.

Aus folgenden Gründen kann es sinnvoll sein, eine DLL-Funktion umzubenennen:

  • Um keine API-Funktionsnamen zu verwenden, die zwischen Groß- und Kleinschreibung unterscheiden.

  • Um die Konventionen vorhandener Namensstandards einzuhalten.

  • Um Funktionen aufzunehmen, die verschiedene Datentypen verwenden (indem mehrere Versionen derselben DLL-Funktion deklariert werden).

  • Um die Verwendung von APIs zu vereinfachen, die ANSI- und Unicode-Versionen enthalten.

In diesem Abschnitt wird das Umbenennen einer DLL-Funktion in verwaltetem Code veranschaulicht.

Umbenennen einer Funktion in Visual Basic

In Visual Basic wird das DllImportAttribute.EntryPoint-Feld mit dem Function-Schlüsselwort in der Declare-Anweisung festgelegt. Das folgende Beispiel zeigt eine Basisdeklaration.

Imports System.Runtime.InteropServices

Public Class Win32
    Declare Auto Function MsgBox Lib "user32.dll" _
       Alias MessageBox (ByVal hWnd As Integer, ByVal txt As String,_
       ByVal caption As String, ByVal Typ As Integer) As Integer
End Class

Sie können den MessageBox-Einstiegspunkt durch MsgBox ersetzen, indem Sie das Alias-Schlüsselwort in die Definition aufnehmen, wie im folgenden Beispiel dargestellt. In beiden Beispielen erübrigt sich aufgrund des Auto-Schlüsselwortes die Angabe der Zeichensatzversion des Einstiegspunktes. Weitere Informationen zum Auswählen eines Zeichensatzes finden Sie unter Angeben eines Zeichensatzes.

Imports System.Runtime.InteropServices

Public Class Win32
    Declare Auto Function MsgBox Lib "user32.dll" _
       Alias MessageBox (ByVal hWnd As Integer, ByVal txt As String,_
       ByVal caption As String, ByVal Typ As Integer) As Integer
End Class

Umbenennen einer Funktion in C# und C++

Sie können das DllImportAttribute.EntryPoint-Feld verwenden, um eine DLL-Funktion nach Name oder Ordinalzahl anzugeben. 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. Andernfalls verwenden Sie eine der folgenden Attributformen zur Angabe eines Namens oder einer Ordinalzahl:

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

Hinweis: Für eine Ordinalzahl müssen Sie das Pfundzeichen (#) als Präfix verwenden.

Im folgenden Beispiel wird veranschaulicht, wie Sie im Code MessageBoxA durch MsgBox ersetzen, indem Sie das EntryPoint-Feld verwenden.

using System.Runtime.InteropServices;

public class Win32 {
    [DllImport("user32.dll", EntryPoint="MessageBoxA")]
    public static extern int MsgBox(int hWnd, String text, String caption,
                                    uint type);
}
using namespace System::Runtime::InteropServices;

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

Siehe auch

Referenz

DllImportAttribute

Konzepte

Erstellen von Prototypen in verwaltetem Code

Beispiele für Plattformaufrufe

Weitere Ressourcen

Marshallen von Daten mit Plattformaufruf