[VBA] Passage de données à une DLL C++

Passage de données à une DLL C++ [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 22-07-2003 à 19:38:09    

Bonjour,
 
J'ai un petit probleme, je dois passer des tableaux de données à une Dll ecrite en C++ mais je n'arrive pas à retrouver les bons nombres.
Voila le prototype de la fonction ds la Dll :

Code :
  1. int __stdcall EnvoiDonnees(int taille, double *X, double *Y);


et voila comment je l'ai declaré dans VB :
 
Public Declare Function DllEnvoiDonnees Lib "Communication.dll" Alias "EnvoiDonnees" (ByVal Taille As Long, ByRef X() As Double, ByRef Y() As Double) As Long
 
Il recupere la taille correctement mais il recupere n'importe quoi au niveau des tableaux.
 
J'ai aussi un autre probleme avec une autre fonction de la Dll. Ca me fait Runtime error Floating point not load. Je ne comprend pas parce que c'est à peut prés la meme fonction.

Code :
  1. int __stdcall EnvoiDonnees2(int taille, int Nom, double *Temps, double *X, double *Y)


et en VB :
Public Declare Function DllEnvoiDonnees2 Lib "Communication.dll" Alias "EnvoiDonnees2" (ByVal Taille As Long, ByVal nom As Long, ByRef Temps() As Double, ByRef X() As Double, ByRef Y() As Double) As Long
 
 
Merci

Reply

Marsh Posté le 22-07-2003 à 19:38:09   

Reply

Marsh Posté le 22-07-2003 à 22:04:51    

Code :
  1. int __stdcall EnvoiDonnees(int taille, double *X, double *Y);

 
 

Code :
  1. Public Declare Function DllEnvoiDonnees Lib "Communication.dll" Alias "EnvoiDonnees" (ByVal Taille As Long, ByVal X As Double, ByVal Y As Double) As Long


 

Code :
  1. call DllEnvoiDonnees(m_dwTaille, m_sngX(0), m_sngY(0) )


 

Code :
  1. int __stdcall EnvoiDonnees2(int taille, int Nom, double *Temps, double *X, double *Y)


 

Code :
  1. Public Declare Function DllEnvoiDonnees2 Lib "Communication.dll" Alias "EnvoiDonnees2" (ByVal Taille As Long, ByVal nom As Long, ByVal Temps As Double, ByVal X As Double, ByVal Y As Double) As Long


 
Je n'ai pas testé mais c'est comme ca que je ferais.

Reply

Marsh Posté le 23-07-2003 à 11:31:18    

Non ca ne marche pas, il me demande un seul double quand je fais ca...

Reply

Marsh Posté le 23-07-2003 à 14:24:28    

Non, il ne demande pas UN SEUL double, mais VB passe les tableau par adresse, donc si tu donnes le premier indice du tableau, c'est bon ... J'ai toujours fait comme ca (avec les mêmes prototes que toi) et ca a toujours fonctionné.


Message édité par karlkox le 23-07-2003 à 14:25:04
Reply

Marsh Posté le 23-07-2003 à 15:42:23    

karlkox a écrit :

Non, il ne demande pas UN SEUL double, mais VB passe les tableau par adresse, donc si tu donnes le premier indice du tableau, c'est bon ... J'ai toujours fait comme ca (avec les mêmes prototes que toi) et ca a toujours fonctionné.


 
J'ai essayé de mettre les proto que tu as dis et d'appeler la fonction comme ca :

Code :
  1. Dim TabX() As Double
  2. Dim TabY() As Double
  3. DllEnvoiDonnees(taille, TabX(0), TabY(0))


 
mais ca plante pendant l'appel de la Dll... Je pense pas que ca vienne de la Dll pke je l'ai deja testé.

Reply

Marsh Posté le 23-07-2003 à 15:46:04    

Ah c bon, j'ai trouvé. Il faut mettre ByRef X()... et passer X(0).
 
Merci  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed