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
Hello,
j'aimerai passer un tableau à 2 dimensions depuis excel vers ma dll, le lire et le remplir puis le renvoyer vers excel
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)
Il y a un autre moyen plus sophistiqué mais aussi plus compliqué à programmer, en réceptionnant dans la DLL une variable de type SAFEARRAY. Fais une recherche sur le site de MS pour plus d'infos.
Cordialement,
Laurent
Hello,
j'aimerai passer un tableau à 2 dimensions
depuis excel vers ma dll, le lire et le remplir
puis le renvoyer vers excel
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)
Il y a un autre moyen plus sophistiqué mais aussi plus compliqué à programmer,
en réceptionnant dans la DLL une variable de type SAFEARRAY. Fais une recherche
sur le site de MS pour plus d'infos.
j'aimerai passer un tableau à 2 dimensions depuis excel vers ma dll, le lire et le remplir puis le renvoyer vers excel
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)
Il y a un autre moyen plus sophistiqué mais aussi plus compliqué à programmer, en réceptionnant dans la DLL une variable de type SAFEARRAY. Fais une recherche sur le site de MS pour plus d'infos.