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:
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 g remplit le tableau tab, par i*200, avec i=0...30.
la fonction gg accède au tableau, pour renvoyer la valeur tab[i].


Voici le programme VBA

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
la fonction m appelle la fonction g qui remplit le tableau, puis la fonction gg
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é.