共用方式為


指定進入點

進入點會識別 DLL 中函式的位置。 在受管理的專案中,目標函式的原始名稱或序數進入點識別跨操作界限的函式。 此外,您可以將進入點對應至不同的名稱,有效地重新命名函式。

以下是重新命名 DLL 函式的可能原因清單:

  • 避免使用區分大小寫的 API 函式名稱

  • 遵守現有的命名標準

  • 若要容納採用不同資料類型的函式(藉由宣告相同 DLL 函式的多個版本)

  • 簡化使用包含 ANSI 和 Unicode 版本的 API

本主題示範如何在Managed程式碼中重新命名 DLL 函式。

在 Visual Basic 中重新命名函式

Visual Basic 會使用 Declare 語句中的 Function 關鍵詞來設定DllImportAttribute.EntryPoint欄位。 下列範例顯示基本宣告。

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

您可以在定義中包含 Alias 關鍵詞,以 MsgBox 取代 MessageBox 進入點,如下列範例所示。 在這兩個範例中, Auto 關鍵詞都不需要指定進入點的字元集版本。 如需選取字元集的詳細資訊,請參閱 指定字元集

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

在 C# 和 C++ 中重新命名函式

您可以使用 DllImportAttribute.EntryPoint 欄位依名稱或序數指定 DLL 函式。 如果方法定義中的函式名稱與 DLL 中的進入點相同,您就不需要使用 EntryPoint 欄位明確識別函式。 否則,請使用下列其中一個屬性表單來指出名稱或序數:

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

請注意,您必須在序數前面加上磅號 (#)。

下列範例示範如何使用 EntryPoint 欄位,將 MessageBoxA 取代為程式代碼中的 MsgBox

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);

另請參閱