Compartilhar via


Especificando um ponto de entrada

Um ponto de entrada identifica a localização de uma função em uma DLL. Em um projeto gerenciado, o nome original ou o ponto de entrada ordinal de uma função de destino identifica que funcionam em limite de interoperação. Além disso, você pode mapear o ponto de entrada para um nome diferente, efetivamente, renomeando a função.

A seguir está uma lista das possíveis razões para renomear uma função de DLL:

  • Para evitar o uso de nomes de função de API diferenciam maiúsculas de minúsculas

  • Para cumprir os padrões de nomenclatura existentes

  • Para acomodar as funções que levam a diferentes tipos de dados (declarando multiple versions of a mesma função DLL)

  • Para simplificar o uso de APIs que contêm versões ANSI e Unicode

Este tópico demonstra como renomear uma função de DLL no código gerenciado.

A renomeação de uma função em Visual Basic

Visual Basic usa o função palavra-chave na Declare a instrução para definir o DllImportAttribute.EntryPoint campo. O exemplo a seguir mostra uma declaração básica.

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

Você pode substituir o MessageBox o ponto de entrada com MsgBox , incluindo o Alias palavra-chave em sua definição, conforme mostrado no exemplo a seguir. Em ambos os exemplos de automático palavra-chave elimina a necessidade de especificar a versão do conjunto de caracteres de ponto de entrada. Para obter mais informações sobre como selecionar um caractere do conjunto, consulte especificando um conjunto de caracteres.

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

A renomeação de uma função em C# e C++

Você pode usar o DllImportAttribute.EntryPoint campo para especificar uma função de DLL pelo nome ou ordinal. Se o nome da função em sua definição de método é o mesmo que o ponto de entrada na DLL, não é necessário identificar explicitamente a função com o EntryPoint campo. Caso contrário, use um dos seguintes formulários de atributo para indicar um nome ou ordinal:

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

Observe que você deve prefixar uma ordinal com o sinal de sustenido (#).

O exemplo a seguir demonstra como substituir MessageBoxA com MsgBox em seu código usando o EntryPoint campo.

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

Consulte também

Referência

DllImportAttribute

Conceitos

A criação de protótipos em código gerenciado

Exemplos de invocação de plataforma

Outros recursos

Empacotamento de dados com a plataforma chamar