Specifica di un punto di ingresso

Un punto di ingresso identifica la posizione di una funzione in una DLL. All'interno di un progetto gestito, il nome originale o il punto di ingresso ordinale di una funzione di destinazione identifica tale funzione oltre i limiti di interoperabilità. È inoltre possibile associare il punto di ingresso a un nome diverso, rinominando così la funzione.

Di seguito è riportato un elenco delle ragioni che possono spingere a rinominare una funzione di DLL:

  • Per evitare l'uso di nomi che si distinguono solo per differenze di lettere maiuscole e minuscole

  • Per conformarsi a standard di denominazione esistenti

  • Per adattare funzioni che accettano diversi tipi di dati (dichiarando più versioni della stessa funzione di DLL)

  • Per semplificare l'utilizzo delle API che contengono versioni ANSI e Unicode

In questo argomento viene illustrato come si rinomina una funzione di DLL nel codice gestito.

Ridenominazione di una funzione in Visual Basic

In Visual Basic viene utilizzata la parola chiave Function nell'istruzione Declare per impostare il campo DllImportAttribute.EntryPoint. Nell'esempio che segue viene illustrata una dichiarazione tipica.

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

È possibile sostituire il punto di ingresso MessageBox con MsgBox includendo la parola chiave Alias nella definizione, come illustrato nell'esempio riportato di seguito. In entrambi gli esempi l'utilizzo della parola chiave Auto consente di non specificare la versione del set di caratteri del punto di ingresso. Per ulteriori informazioni sulla selezione di un set di caratteri, vedere Specifica di un set di caratteri.

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

Ridenominazione di una funzione in C# e in C++

È possibile utilizzare il campo DllImportAttribute.EntryPoint per specificare una funzione DLL in base al nome o all'ordinale. Se il nome della funzione nella propria definizione del metodo è uguale al punto di ingresso nella DLL, non occorrerà identificare esplicitamente la funzione con il campo EntryPoint. In caso contrario, utilizzare una delle seguenti forme dell'attributo per indicare un nome o un numero ordinale:

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

Si noti che il numero ordinale deve essere preceduto dal segno di cancelletto (#).

Nell'esempio seguente viene illustrato come sostituire MessageBoxA con MsgBox a livello di codice utilizzando il 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);

Vedere anche

Riferimenti

DllImportAttribute

Concetti

Creazione di prototipi nel codice gestito

Esempi di platform invoke

Altre risorse

Marshalling dei dati con platform invoke