SAFEARRAY

jazz2 Messages postés 8 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 26 juin 2007 - 30 mai 2007 à 10:19
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011 - 5 août 2008 à 17:16
Bonjour,
obligé de devoir utiliser des SAFEARRAY, je voudrais créer une fonction avec plusieurs tableaux de type SAFERRAY. Je ne peux pas les entrer dans des fonctions différentes puisque l'accès aux différents SAFERRAY se fait en parallèle, et je ne peux pas les rergrouper ensemble puisque ce sont des tableaux d' UDTs, différents. Est-ce possible de créer une fonction avec plusieurs SAFEARRAY en arguments, et comment les appeler, les différencier dans la fonction ?

Typiquement le code suivant ne fonctionne pas car "error C2371: 'elt' : redefinition; different basic types"

void __declspec (dllexport) __stdcall test(SAFEARRAY **tableau1, SAFEARRAY **tableau2)

 type1 *elt;
 SafeArrayAccessData(*tableau1,(void**)&elt);



 type2 *elt;
 SafeArrayAccessData(*tableau2,(void**)&elt);

}

avec

typedef struct type1{
long e1;
long e2
double e3;
}type1;



typedef struct type2{
 int b1;
 long b2;
}type2;

6 réponses

cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
30 mai 2007 à 12:39
Salut, je n'ai pas bien pigé mais ceci ne suffit pas ?
void __declspec (dllexport) __stdcall test(SAFEARRAY **tableau1, SAFEARRAY **tableau2)

 type1 *elt_type1;
 SafeArrayAccessData(*tableau1,(void**)&elt_type1); type2 *elt_type2;
 SafeArrayAccessData(*tableau2,(void**)&elt_type2);
}
0
jazz2 Messages postés 8 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 26 juin 2007
2 juin 2007 à 21:30
Je n'ai pas du bien comprendre en fait ce qu'était "elt". Et je me pose une question. Supposons que la fonction test ci-dessus appelle une autre fonction avec comme paramètre tableau1. Comment devrais-je le déclarer ? avec *elt_type1 ou SAFEARRAY.

Pour plus de clareté, que faut-il mettre à la place des pointillés si je veux que ça utilise mon tableau1 ?

void __declspec (dllexport) __stdcall test(SAFEARRAY **tableau1, SAFEARRAY **tableau2)

 type1 *elt_type1;
 SafeArrayAccessData(*tableau1,(void**)&elt_type1); type2 *elt_type2;
 SafeArrayAccessData(*tableau2,(void**)&elt_type2);

fonction_annexe( ... ) // prend en paramètre mon tableau1 mais comment le déclarer ?

}
0
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
4 juin 2007 à 01:15
fonction_annexe(SAFEARRAY ** tableau) {
    .....
    .....
}

Bonne chance.

Bouba
0
jazz2 Messages postés 8 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 26 juin 2007
4 juin 2007 à 22:23
Ok, merci pour cette info sur la déclaration de la fonction. Et maintenant pour l'appel de ma fonction annexe qui est dans la fonction test, je dois mettre quoi comme paramètre ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jazz2 Messages postés 8 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 26 juin 2007
5 juin 2007 à 16:50
Y'a un souci, avec ce principe de protection "safearrayaccesssdata" je ne peux pas accéder à mon tableau1, après avoir initialisé mon tableau2. Comment trouver une façon pour copier les données d'un safearray dans un tableau dynamique classique en C++ ?
0
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
5 août 2008 à 17:16
Salut,

BYTE* buffer = (BYTE *)psa16->pvData;

Cordialement,
Sébastien.
0