Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Laurent Longre
Bonjour,
J'ai créé une dll en C++ que je utilise dans Excel et j'aimerais savoir comment faire passer des tableaux de double entre Excel et cette dll.
Le moyen le plus simple (mais pas le plus élégant) : tu mets 3 arguments à ta fonction : un pointeur vers double, le nombre de lignes et le nombre de colonnes de ton tableau. Dans VBA tu passes à la fonction la référence du premier élément du tableau, le nombre de colonnes et le nombre de lignes.
Par exemple :
DLL :
extern "C" __declspec(dllexport) double WINAPI MaFonction(double* Tableau, int Lignes, int Cols) { double Ret=0; for(int i=0; i < Lignes*Cols; i++) Ret+=Tableau[i]; return Ret; }
VBA :
Private Declare Function MaFonction Lib "C:TempTest.dll" _ (Item0 As Double, ByVal Lignes As Long, ByVal Colonnes As Long) As Double
Sub Test()
Dim Tableau(0 To 9, 0 To 9) As Double Dim I As Integer, J As Integer
For I = 0 To 9 For J = 0 To 9 Tableau(I, J) = I * J Next J Next I
MsgBox MaFonction(Tableau(0, 0), 10, 10)
End Sub
Si ton tableau n'a qu'une dimension : MaFonction(Tableau(0), Lignes, Colonnes)
Cordialement,
Laurent
Bonjour,
J'ai créé une dll en C++ que je utilise dans Excel
et j'aimerais savoir comment faire passer des tableaux de double
entre Excel et cette dll.
Le moyen le plus simple (mais pas le plus élégant) : tu mets 3 arguments à ta
fonction : un pointeur vers double, le nombre de lignes et le nombre de colonnes
de ton tableau. Dans VBA tu passes à la fonction la référence du premier élément
du tableau, le nombre de colonnes et le nombre de lignes.
Par exemple :
DLL :
extern "C" __declspec(dllexport) double WINAPI MaFonction(double* Tableau,
int Lignes, int Cols)
{
double Ret=0;
for(int i=0; i < Lignes*Cols; i++) Ret+=Tableau[i];
return Ret;
}
VBA :
Private Declare Function MaFonction Lib "C:TempTest.dll" _
(Item0 As Double, ByVal Lignes As Long, ByVal Colonnes As Long) As Double
Sub Test()
Dim Tableau(0 To 9, 0 To 9) As Double
Dim I As Integer, J As Integer
For I = 0 To 9
For J = 0 To 9
Tableau(I, J) = I * J
Next J
Next I
MsgBox MaFonction(Tableau(0, 0), 10, 10)
End Sub
Si ton tableau n'a qu'une dimension : MaFonction(Tableau(0), Lignes, Colonnes)
J'ai créé une dll en C++ que je utilise dans Excel et j'aimerais savoir comment faire passer des tableaux de double entre Excel et cette dll.
Le moyen le plus simple (mais pas le plus élégant) : tu mets 3 arguments à ta fonction : un pointeur vers double, le nombre de lignes et le nombre de colonnes de ton tableau. Dans VBA tu passes à la fonction la référence du premier élément du tableau, le nombre de colonnes et le nombre de lignes.
Par exemple :
DLL :
extern "C" __declspec(dllexport) double WINAPI MaFonction(double* Tableau, int Lignes, int Cols) { double Ret=0; for(int i=0; i < Lignes*Cols; i++) Ret+=Tableau[i]; return Ret; }
VBA :
Private Declare Function MaFonction Lib "C:TempTest.dll" _ (Item0 As Double, ByVal Lignes As Long, ByVal Colonnes As Long) As Double
Sub Test()
Dim Tableau(0 To 9, 0 To 9) As Double Dim I As Integer, J As Integer
For I = 0 To 9 For J = 0 To 9 Tableau(I, J) = I * J Next J Next I
MsgBox MaFonction(Tableau(0, 0), 10, 10)
End Sub
Si ton tableau n'a qu'une dimension : MaFonction(Tableau(0), Lignes, Colonnes)