Dll C++ et appel en VBA

Signaler
Messages postés
2
Date d'inscription
mercredi 6 juillet 2011
Statut
Membre
Dernière intervention
13 juillet 2011
-
Messages postés
2
Date d'inscription
mercredi 6 juillet 2011
Statut
Membre
Dernière intervention
13 juillet 2011
-
Bonjour,
J'ai créé un DLL C++ qui contient la fonction suivante :

double __stdcall AdditionTableau_5(double * table1, double * table2, double * RetourTableau) {
int i;
for (i= 0;i<5;i++) {
RetourTableau[i] = table1[i] + table2[i];
}
return 1.0;
}


Dans mon code VBA, je fais :

Declare Function AdditionTableau_5 _
Lib "D:\Documents and Settings\stage\Bureau\CPP\Test_DLL7\Debug\Test_DLL7.dll" (ByRef table1() As Double, ByRef table2() As Double, ByRef RetourTableau() As Double) As Double



Sub Fonction_Test3()
    
    
    Dim Retour_F As Double
    Dim table1(1 To 5) As Double
    Dim table2(1 To 5) As Double
    Dim RetourTableau(1 To 5) As Double
    
    table1(1) = 1
    table1(2) = 2
    table1(3) = 3
    table1(4) = 4
    table1(5) = 5
    
    table2(1) = 1
    table2(2) = 2
    table2(3) = 3
    table2(4) = 4
    table2(5) = 5
    
    Retour_F = AdditionTableau_5(table1, table2, RetourTableau)
    MsgBox (Retour_F)
        
End Sub


Quand j'essaie de voir ce qu'il y a dans RetourTableau, ça m'affiche un message d'erreur l' indice n'appartient pas à la sélection .
Le tableau n'est pas non plus rempli lorsque je remplace :
Retour_F  = AdditionTableau_5(table1, table2, RetourTableau)


par :

Retour_F = AdditionTableau_5(table1(1), table2(1), RetourTableau(1))



Ca me met comme message Incompatibilité de type : tableau ou type défini par l'utilisateur attendu

Comment faire pour passer des tableaux en paramètre?

Merci

2 réponses

Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
2
Bonjour,

En VB, déclare ta fonction de la manière suivante :

Declare Function AdditionTableau_5 _
Lib "D:\Documents and Settings\stage\Bureau\CPP\Test_DLL7\Debug\Test_DLL7.dll" (ByRef table1 As Double, ByRef table2 As Double, ByRef RetourTableau As Double) As Double

Ne met pas les () car pour ta dll les paramètres sont des pointeurs, tu lui passes donc les adresses du premier élément de tes tableaux.
Messages postés
2
Date d'inscription
mercredi 6 juillet 2011
Statut
Membre
Dernière intervention
13 juillet 2011

Salut,
Merci beaucoup, ça marche maintenant!

Cordialement