Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Точка входа определяет расположение функции в библиотеке DLL. В управляемом проекте исходная точка входа или порядковый номер целевой функции определяет эту функцию через границу взаимодействия. Кроме того, можно сопоставить точку входа с другим именем, фактически переименовав функцию.
Ниже приведен список возможных причин переименования функции DLL:
Чтобы избежать использования имен функций API с учетом регистра
Соответствие существующим стандартам именования
Для размещения функций, которые принимают различные типы данных (объявляя несколько версий одной и той же функции DLL)
Упрощение использования API, содержащих версии ANSI и Юникода
В этом разделе показано, как переименовать функцию DLL в управляемом коде.
Переименование функции в Visual Basic
Visual Basic использует ключевое слово Function в инструкции Declare для задания 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
Точку входа MessageBox можно заменить на MsgBox , включив ключевое слово Alias в определение, как показано в следующем примере. В обоих примерах ключевое слово 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")]
Обратите внимание, что необходимо префикс порядкового номера с знаком фунта (#).
В следующем примере показано, как заменить MessageBoxA на MsgBox в коде с помощью поля 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);