Problème de DLL, Aidez moi svp

Fermé
jbs106 Messages postés 21 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 5 décembre 2012 - 22 sept. 2009 à 13:15
 le père - 22 sept. 2009 à 15:45
Bonjour,
J'ai ouvert un projet en vc++ studio express 2008. projet win32, dll, nommée tutorial, et dans le fichier tutorial.cpp, j'ai ajouté trois fonctions:

extern "C" __declspec(dllexport) int factorielle(int n)
{
int resultat = 1;
if(n < 0)
return -1;
if(n == 0)
return 1;
for(; n > 0; n--)
resultat *= n;
return resultat;
}

extern "C" __declspec(dllexport) int trois()
{
return 3;
}
extern "C" __declspec(dllexport) int deuxfois(int n)
{ return 2*n;
}
****************************************************
voici mon appel en vba:

Declare Function factorielle Lib "D:\Dev\tutorial.dll" (ByVal n As Long) As Long
Declare Function trois Lib "D:\Dev\tutorial.dll" () As Long
Declare Function deuxfois Lib "D:\Dev\tutorial.dll" (ByVal n As Long) As Long
Sub tste()
Dim tst
tst = 6
tst = trois
tst = factorielle(6)
End Sub

Pourquoi la fonction trois() fonctionne et la fonction factorielle ne fonctionne pas? J'ai même essayé avec une fonction me doublant une valeur entrée en paramètre, toujours la même erreur; convention d'appel de DLL incorrecte erreur 49. ça viendrai d'où? Elles ne sont pas compliquées ces fonctions...

J'utilise dépendency walker pour bien voir mes fonctions. Elles y sont toutes mais impossible d'en appeler une avec un paramètre... Là, je suis vraiment bloqué, je comprends pas. s'il vous plais, aidez moi.

3 réponses

Bonjour

Il faut ajouter la convention d'appel __stdcall (si tu ne précises pas, le compilateur prend __cdecl) par exemple :
__declspec(dllexport) int __stdcall factorielle(int n)
2
jbs106 Messages postés 21 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 5 décembre 2012
22 sept. 2009 à 15:42
Merci, ça fonctionne.
0
de rien :-)
0