Sdílet prostřednictvím


Určení vstupního bodu

Vstupní bod určuje umístění funkce v knihovně DLL. Původní název nebo řadový vstupní bod cílové funkce identifikuje v rámci spravovaného projektu funkci napříč hranicemi interoperability. Dále je možné namapovat vstupní bod na jiný název, a tak funkci účinně přejmenovat.

Následuje seznam možných důvodů přejmenování funkce knihovny DLL:

  • Zamezení používání názvů funkcí rozhraní API, která rozlišují velikost písmen

  • Dodržování stávajících standardů pro zadávání názvů

  • Přizpůsobení funkcí, které přijímají různé datové typy (deklarací několika verzí stejné funkce knihovny DLL)

  • Zjednodušení používání rozhraní API, která obsahují verze ANSI a Unicode

Toto téma popisuje, jakým způsobem lze přejmenovat funkci knihovny DLL ve spravovaném kódu.

Přejmenování funkce v jazyce Visual Basic

Jazyk Visual Basic používá klíčové slovo Funkce v příkazu Declare k nastavení DllImportAttribute.EntryPoint pole. Následující příklad znázorňuje základní deklaraci.

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

Vstupní bod MessageBox můžete nahradit msgBox zahrnutím klíčového slova Alias do definice, jak je znázorněno v následujícím příkladu. V obou příkladech klíčové slovo Auto eliminuje nutnost zadat verzi znakové sady vstupního bodu. Další informace o výběru znakové sady naleznete v tématu Určení znakové sady.

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

Přejmenování funkce v jazyce C# a C++

K určení funkce knihovny DLL pomocí názvu nebo řádu můžete použít pole DllImportAttribute.EntryPoint . Pokud je název funkce v definici metody stejný jako vstupní bod v knihovně DLL, nemusíte funkci explicitně identifikovat s polem EntryPoint . Jinak lze pro určení názvu nebo řádu použít jednu z těchto podob atributů:

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

Je nutné poznamenat, že pro řád je třeba použít předponu v podobě znaku libry (#).

Následující příklad ukazuje, jak nahradit MessageBoxA MsgBox v kódu pomocí EntryPoint pole.

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

Viz také