Dll C++ et appel en VBA

floatingspread Messages postés 2 Date d'inscription mercredi 6 juillet 2011 Statut Membre Dernière intervention 13 juillet 2011 - 13 juil. 2011 à 09:10
floatingspread Messages postés 2 Date d'inscription mercredi 6 juillet 2011 Statut Membre Dernière intervention 13 juillet 2011 - 13 juil. 2011 à 13:51
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

ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
13 juil. 2011 à 12:03
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.
0
floatingspread Messages postés 2 Date d'inscription mercredi 6 juillet 2011 Statut Membre Dernière intervention 13 juillet 2011
13 juil. 2011 à 13:51
Salut,
Merci beaucoup, ça marche maintenant!

Cordialement
0
Rejoignez-nous