Compartir a través de


Especificar un punto de entrada

Actualización: noviembre 2007

Un punto de entrada identifica la ubicación de una función en un archivo DLL. En un proyecto administrado, el nombre original o el punto de entrada ordinal de una función de destino identifica dicha función dentro de los límites de la interoperabilidad. Además, puede asignarle otro nombre al punto de entrada, lo que supone en realidad un cambio de nombre de la función.

A continuación, se muestra una lista de las razones que pueden existir para desear cambiarle el nombre a una función de un archivo DLL:

  • Para no utilizar nombres de función de la API que distinguen mayúsculas de minúsculas

  • Para cumplir los estándares de nomenclatura existentes

  • Para incluir funciones que toman tipos de datos distintos (declarando varias versiones de la misma función de un archivo DLL)

  • Para simplificar el uso de las API que contienen versiones ANSI y Unicode

En este tema se muestra la forma de cambiar el nombre de una función de un archivo DLL en código administrado.

Cambiar el nombre de una función en Visual Basic

Visual Basic utiliza la palabra clave Function en la instrucción Declare para establecer el campo DllImportAttribute.EntryPoint. En el siguiente ejemplo muestra una declaración 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

Es posible reemplazar el punto de entrada MessageBox por MsgBox incluyendo la palabra clave Alias en la definición, tal y como se muestra en el ejemplo siguiente. En los dos ejemplos, la palabra clave Auto elimina la necesidad de especificar la versión del juego de caracteres del punto de entrada. Para obtener más información acerca de la forma de seleccionar un juego de caracteres, vea Especificar un juego 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

Cambiar el nombre de una función en C# y C++

Puede utilizar el campo DllImportAttribute.EntryPoint para especificar una función DLL por nombre u ordinal. Si el nombre de la función en la definición del método es el mismo que el punto de entrada en el archivo DLL, no es necesario identificar la función de forma explícita con el campo EntryPoint. En caso contrario, utilice una de las siguientes formas de atributo para indicar un nombre u ordinal:

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

Tenga en cuenta que los ordinales deben ir precedidos del símbolo de libra esterlina (#).

En el siguiente ejemplo se muestra la forma de reemplazar MessageBoxA por MsgBox en el código utilizando el campo EntryPoint.

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

Vea también

Conceptos

Crear prototipos en código administrado

Ejemplos de invocación de plataforma

Referencia

DllImportAttribute

Otros recursos

Calcular referencias de datos con invocación de plataforma