bonjour
j'essaye de créer un DLL avec VC2005, afin que cette DLL soit utilisable par excel en VBA.
J'ai crée en C++ une fonction simple, qui remplit un tableau:
la fonction g remplit le tableau tab, par i*200, avec i=0...30.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 char *tab=new char[30]; void finum::g(void){ for (int i=0;i<31;i++){ long j=i*200; tab[i]=j; } } long finum::gg(int i){ long h=tab[i]; return h;} int main(){ return 0; }
la fonction gg accède au tableau, pour renvoyer la valeur tab[i].
Voici le programme VBA
la fonction m appelle la fonction g qui remplit le tableau, puis la fonction gg
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Declare Function gg Lib "C:\WINDOWS\system\finum.dll" Alias "_gg@4" (ByVal x As Long) As Double Declare Function g Lib "C:\WINDOWS\system\finum.dll" Alias "_g@0" () As Long Sub test() Dim ii As Long Dim i, ki, m, cnt, N As Long m = g() For ii = 1 To 15 ki = gg(ii) Sheets("test").Range("A1").Cells(ii, 1) = ki Next ii End Sub
appelle la fonction en C++.
J'ai essayé, ca marche lorsque les valeurs du tableau que l'on remplit sont des faibles valeurs. Mais lorsqu'on entre dans le tableau de fortes valeurs, ca renvoie dans VBA des valeurs différentes.
Je pense que ca vient d'un probleme de correspondance entre les types VBA/C++. J'ai essaye plusieurs combinaisons mais ca marche pas.
Je sais qu'il y a un tuto la dessus, mais en vain, ca ne m'a pas aidé.
Partager