VBA CallBack function vers DLL

toto_fr_2002 Messages postés 2 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 2 septembre 2005 - 31 août 2005 à 19:53
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 3 sept. 2005 à 10:00
J'ai un pb pour envoyer un pointeur de function vers une DLL de VBA. Exactement ca marche si la function() n'a pas d'argument mais pas si elle prend un argument

Voici mon programme de 8 lignes, avec la function DLL (2 lignes), si qq sait ce qui cloche:

Le code en VBA:
----------------------------------------------------
Option Explicit

Declare Function DLLFunction Lib "MyDLL.dll" _
(ByVal VBFunction As Long) As Double

Function VBFunction(ByVal val As Double) As Double
VBFunction = val
End Function

Sub CallBack()
DLLFunction AddressOf VBFunction
End Sub
----------------------------------------------------

Et le code pour MyDLL en C++:
----------------------------------------------------
double __stdcall DLLFunction( double VBFunction(double val) )
{ return VBFunction(val); }
----------------------------------------------------

3 réponses

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
1 sept. 2005 à 15:47
salut,



le code de ta dll me parait curieux, surtout le paramètre VBFunction, moi je mettrais :


typedef double __stdcall (*LPVBFct)(double val);

double __stdcall DLLFunction(LPVBFct VBFunction, double val)

{ return VBFunction(val); }



ou bien :



double __stdcall DLLFunction(double __stdcall (*VBFunction)(double), double val)

{ return VBFunction(val); }



et donc :

Declare Function DLLFunction Lib "MyDLL.dll" _

(ByVal VBFunction As Long,Byval val as double) As Double


ShareVB
0
toto_fr_2002 Messages postés 2 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 2 septembre 2005
2 sept. 2005 à 11:33
Tu as raison le pb est la DLL, j'ai oublie de donner la convention
_stdcall pour le pointeur de fc. Un des code correct est donc:



------------------------------------------

double __stdcall DLLFunction( double _stdcall VBFunction(double val) )

{ return VBFunction(1); }

-----------------------------------------



marrant que le compiler puisse accepter 2 type de conventions differentes...
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
3 sept. 2005 à 10:00
salut,



avec quel compilo peux-tu compiler un tel code ? le paramètre
VBFunction n'a pas la syntaxe d'un pointeur de fonction ? ce devrait
être (*VBFunction) ???

ShareVB
0
Rejoignez-nous