Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Punkt wejścia identyfikuje lokalizację funkcji w bibliotece DLL. W ramach zarządzanego projektu oryginalna nazwa lub porządkowy punkt wejściowy docelowej funkcji identyfikuje tę funkcję przez granicę interoperacyjności. Ponadto można mapować punkt wejścia na inną nazwę, efektywnie zmieniając nazwę funkcji.
Poniżej znajduje się lista możliwych przyczyn zmiany nazwy funkcji DLL:
Aby uniknąć używania nazw funkcji interfejsu API uwzględniających wielkość liter
Aby zachować zgodność z istniejącymi standardami nazewnictwa
Aby obsłużyć funkcje, które przyjmują różne typy danych (deklarując wiele wersji tej samej funkcji DLL)
Aby uprościć korzystanie z interfejsów API zawierających wersje ANSI i Unicode
W tym temacie pokazano, jak zmienić nazwę funkcji DLL w kodzie zarządzanym.
Zmiana nazwy funkcji w Visual Basic
Visual Basic używa słowa kluczowego Function w instrukcji Declare , aby ustawić pole DllImportAttribute.EntryPoint. W poniższym przykładzie przedstawiono podstawową deklarację.
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
Punkt wejścia MessageBox można zastąpić MsgBox, dołączając słowo kluczowe Alias do swojej definicji, jak pokazano w poniższym przykładzie. W obu przykładach Auto słowo kluczowe eliminuje konieczność określenia wersji zestawu znaków punktu wejścia. Aby uzyskać więcej informacji na temat wybierania zestawu znaków, zobacz Określanie zestawu znaków.
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
Zmiana nazwy funkcji w języku C# i C++
Za pomocą DllImportAttribute.EntryPoint pola można określić funkcję DLL według nazwy lub porządkowej. Jeśli nazwa funkcji w definicji Twojej metody jest taka sama jak punkt wejścia w bibliotece DLL, nie musisz jawnie wskazywać funkcji używając pola EntryPoint. W przeciwnym razie użyj jednej z następujących form atrybutu, aby wskazać nazwę lub liczbę porządkową.
[DllImport("DllName", EntryPoint = "Functionname")]
[DllImport("DllName", EntryPoint = "#123")]
Zwróć uwagę, że musisz prefiks porządkowy z znakiem funta (#).
W poniższym przykładzie pokazano, jak zastąpić MessageBoxA na MsgBox w kodzie przy użyciu pola 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);