Passage de tableaux de structure entre vba et dll c++
vba_blitz
Messages postés32Date d'inscriptiondimanche 12 juin 2005StatutMembreDernière intervention26 juin 2007
-
28 mars 2007 à 17:06
vba_blitz
Messages postés32Date d'inscriptiondimanche 12 juin 2005StatutMembreDernière intervention26 juin 2007
-
2 avril 2007 à 14:38
Bonjour
je passe un tableau de type utilisateur via une dll c++ dont voici la structure simplifiée :
Private Type A
aa as long
aaa() as long
end type
en c ++ :
struct A{
long aa;
long* aaa;
};
Ensuite dans mon code c++, je fais le code suivant :
A *elt;
for (int i=0;i<N;i++)
for (int i=0;i<NN;i++)
cout << elt[i].aaa[j];
Ce code tourne mais elt[i].aaa[j] retourne toujours 1.69801e-313 alors que dans vba on peut voir qu'il contient bien des long.
vba_blitz
Messages postés32Date d'inscriptiondimanche 12 juin 2005StatutMembreDernière intervention26 juin 2007 29 mars 2007 à 10:02
Le problème doit venir des données de elt[i].tableau[j]. Faut il faire un SafeArrayAccessData() sur les tableaux de la liste de structures A pour y accéder ?
vba_blitz
Messages postés32Date d'inscriptiondimanche 12 juin 2005StatutMembreDernière intervention26 juin 2007 29 mars 2007 à 12:59
oui mais je vois pas le changement
J'ai ca :
A *elt;
SafeArrayAccessData(*List,(void**)&elt);
Mais quand j'essaye d'afficher ou de remplir elt[i].tableau[j] ca ne marche pas ! Ca me met une erreur quand je le remplis et ca retourne des chiffres faux quand je l'affiche. Comment accéder proprement a tableau[j] de l'element i du tableau de structure A.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 29 mars 2007 à 14:47
tu n'aura JAMAIS a utiliser elt[i].tableau[j] ...
je te l'ai dit, "on prend les mêmes et on recommence" :
tableau n'est pas le premier element de ton tableau... c'est un SafeArray (les tableaux de VB)
tu dois donc acquerir le pointeur vers les données, et jouer avec....
vba_blitz
Messages postés32Date d'inscriptiondimanche 12 juin 2005StatutMembreDernière intervention26 juin 2007 29 mars 2007 à 15:08
et comment acquérir le pointeur vers les données et comment l'utiliser ? que dois mettre derrière elt[i] pour accéder aux élements du tableau de elt[i] ?
j'effectue cette operation dans une boucle sur i et avant la fin de la boucle je rajoute SafeArrayUnaccessData(*(elt[i].tableau)), mais le programme plante.