Compartilhar via


Especificando um ponto de entrada

Um ponto de entrada identifica o local de uma função em uma DLL.Dentro de 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, renomeando efetivamente a função.

Veja a seguir uma lista das possíveis razões para renomear uma função de DLL:

  • Para evitar o uso de nomes de função API que diferenciam diferenciar 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 várias versões da 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.

Renomear uma função no Visual Basic

Visual Basic usa o Função palavra-chave a Declarar demonstrativo para conjunto 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 ponto de entrada com MsgBox , incluindo o Alias palavra-chave em sua definição, sistema autônomo mostrado no exemplo a seguir.Em ambos os exemplos a Automáticopalavra-chave elimina a necessidade de especificar a versão do conjunto de caractere do ponto de entrada.Para obter mais informações sobre como selecionar um caractere de 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

Renomear uma função em translation from VPE for Csharp e C++

Você pode usar o DllImportAttribute.EntryPoint campo para especificar uma função de DLL por nome ou ordinal. Se o nome de função em sua definição de método é a mesma sistema autônomo 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 o 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 with MsgBox no 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

Conceitos

Criando protótipos em código gerenciado

Exemplos de invocação de plataforma

Referência

DllImportAttribute

Outros recursos

marshaling de dados com invocação de plataforma