Partager via


Spécification d’un point d’entrée

Un point d’entrée identifie l’emplacement d’une fonction dans une DLL. Dans un projet managé, le nom d’origine ou le point d’entrée ordinal d’une fonction cible identifie cette fonction sur la limite d’interopérabilité. En outre, vous pouvez mapper le point d’entrée à un autre nom, en renommant efficacement la fonction.

Voici une liste des raisons possibles de renommer une fonction DLL :

  • Éviter d’utiliser des noms de fonction API respectant la casse.

  • Pour se conformer aux normes d’affectation de noms existantes

  • Pour prendre en charge les fonctions qui prennent différents types de données (en déclarant plusieurs versions de la même fonction DLL)

  • Pour simplifier l’utilisation d’API qui contiennent des versions ANSI et Unicode

Cette rubrique montre comment renommer une fonction DLL dans le code managé.

Renommage d’une fonction en Visual Basic

Visual Basic utilise le Function mot clé dans l’instruction Declare pour définir le DllImportAttribute.EntryPoint champ. L’exemple suivant montre une déclaration de base.

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

Vous pouvez remplacer le MessageBox point MsgBox d’entrée par l’inclusion du Alias mot clé dans votre définition, comme illustré dans l’exemple suivant. Dans les deux exemples, le Auto mot clé élimine la nécessité de spécifier la version de jeu de caractères du point d’entrée. Pour plus d’informations sur la sélection d’un jeu de caractères, consultez Spécification d’un jeu de caractères.

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

Renommer une fonction en C# et C++

Vous pouvez utiliser le DllImportAttribute.EntryPoint champ pour spécifier une fonction DLL par nom ou ordinal. Si le nom de la fonction dans votre définition de méthode est identique au point d’entrée de la DLL, vous n’avez pas besoin d’identifier explicitement la fonction avec le EntryPoint champ. Sinon, utilisez l’un des formulaires d’attribut suivants pour indiquer un nom ou un ordinal :

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

Notez que vous devez ajouter le préfixe # (signe dièse) à un ordinal.

L’exemple suivant montre comment remplacer MessageBoxAMsgBox dans votre code à l’aide du EntryPoint champ.

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

Voir aussi