Appel de fonctions de la DLL à partir d'applications Visual Basic
Pour que les applications Visual Basic (ou les applications dans d’autres langages tels que Pascal ou Fortran) appellent des fonctions dans une DLL C/C++, les fonctions doivent être exportées à l’aide de la convention d’appel correcte sans aucune décoration de nom effectuée par le compilateur.
__stdcall
crée la convention d’appel correcte pour la fonction (la fonction appelée propre s vers le haut de la pile et les paramètres sont passés de droite à gauche), mais décore le nom de la fonction différemment. Par conséquent, lorsqu’elle __declspec(dllexport)
est utilisée sur une fonction exportée dans une DLL, le nom décoré est exporté.
La __stdcall
décoration de nom préfixe le nom du symbole avec un trait de soulignement ( _ ) et ajoute le symbole avec un caractère de signe@ () suivi du nombre d’octets dans la liste d’arguments (espace de pile requis). Par conséquent, la fonction est déclarée comme suit :
int __stdcall func (int a, double b)
est décoré comme _func@12
dans la sortie.
La convention d’appel C (__cdecl
) décore le nom en tant que _func
.
Pour obtenir le nom décoré, utilisez /MAP. L’utilisation des __declspec(dllexport)
opérations suivantes est la suivante :
Si la fonction est exportée avec la convention d’appel C (
__cdecl
), elle supprime le trait de soulignement principal ( _ ) lorsque le nom est exporté.Si la fonction exportée n’utilise pas la convention d’appel C (par exemple),
__stdcall
elle exporte le nom décoré.
Étant donné qu’il n’existe aucun moyen de remplacer l’emplacement où se produit la pile propre up, vous devez utiliser __stdcall
. Pour annuler l’utilisation de noms __stdcall
, vous devez les spécifier à l’aide d’alias dans la section EXPORT du fichier .def. Voici ce qui suit pour la déclaration de fonction suivante :
int __stdcall MyFunc (int a, double b);
void __stdcall InitCode (void);
Dans le . Fichier DEF :
EXPORTS
MYFUNC=_MyFunc@12
INITCODE=_InitCode@0
Pour que les DLL soient appelées par des programmes écrits en Visual Basic, la technique d’alias indiquée dans cette rubrique est nécessaire dans le fichier .def. Si l’alias est effectué dans le programme Visual Basic, l’utilisation de l’alias dans le fichier .def n’est pas nécessaire. Elle peut être effectuée dans le programme Visual Basic en ajoutant une clause d’alias à l’instruction Declare .
Sur quels éléments souhaitez-vous obtenir des informations supplémentaires ?
Exportation à partir d’une DLL à l’aide de __declspec(dllexport)
Exportation de fonctions C++ à utiliser dans des exécutables en langage C