[Débutant]Un tableau ASCII alimenté par des ComBSTR [Résolu]

Messages postés
4
Date d'inscription
lundi 20 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2004
- - Dernière réponse : zegilooo
Messages postés
4
Date d'inscription
lundi 20 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2004
- 24 sept. 2004 à 12:42
Bonjour,

je débute en C++ et plus particulièrement avec Windows.
Je cherche à alimenter un tableau au format ASCII avec des données récupérées d'un type ComBSTR.

Je connais les méthodes ASCtoBSTR et BSTRtoASC
J'ai crée un tableau string :

string * ListeCN[10];
// je lui alloue 10 éléments, mais il faudrait qu'il soit dynamique parceque je ne connais pas le nombre d'éléments qu'il contiendra

je veux le passer à cette méthode :
HRESULT PrintAllObjects(IADsContainer* pContainer, string * ListeCN);

hr =PrintAllObjects(pCont, *ListeCN );

dans PrintAllObjects :

HRESULT PrintAllObjects(IADsContainer* pContainer, string * ListeCN )
{
long tailleListeCN;
HRESULT hr;
char * TabElem;
CComBSTR sbstr;

// ici j'alimente "sbstr" puis

tailleListeCN = sizeof(*ListeCN);
tailleListeCN++;

BSTRtoASC( sbstr, &TabElem);

ListeCN[tailleListeCN] = TabElem;

évidement, ça, ça ne marche pas. Visual Studio me dit :
'BSTRtoASC' : aucune des surcharges 2 ne peut convertir le paramètre 2 à partir du type 'char **__w64 '
Pour mémoire :
void BSTRtoASC (BSTR str, char * strRet) {

if ( str != NULL ) {
unsigned long length = WideCharToMultiByte ( CP_ACP, 0, str, SysStringLen(str), NULL, 0, NULL, NULL );
strRet = new char[length];
length = WideCharToMultiByte ( CP_ACP, 0, str, SysStringLen(str), reinterpret_cast <char *>(strRet), length, NULL, NULL );
strRet[length] = '\0';
}
}

Je sais que ç'est pas du joli.
Mais si une bonne âme pouvait me débloquer de cette situation, je lui en serai reconnaissant.
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
5
3
Merci
"Je n'ai pas trouvé de bon tuto sur les tableaux de chaine de caractère."

pas besoin de tuto pour ca, suffit de connaitre les tableau et les chaines de caracteres

"quel type de tableau est idéal pour contenir une liste de chaines ASCII de taille variable ( un tableau de chemins de documents par exemple ) et dont le nombre d'éléments est dynamique. "

typiquement un tableau dynamique de tableau dynamique de caractere

char **tab;

mais on gagnerais beaucoup (contiguite et acces plus direct) a connaitre la taille max des chaines (par exemple MAX_PATH) car on aurais plus qu'a allouer un tableau dynamique de tableaux de taille MAX_PATH +1 (ou un truc comme ca)

char (*tab)[MAX_PATH + 1];

tab = malloc( nb_elt * sizeof *tab );
...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 216 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
5
0
Merci
oui c'est pas du jolie ;)

serieux faidrais lire un cours sur les pointeurs/tableaux sinon tu vas jamais t'en sortir, la tu melange tout !

string * ListeCN[10]; c'est un tableau de pointeur sur string

et c'est quoi ce type string ? (a quoi ca correspond?)

le message d'erreur est clair, tu passes a BSTRtoASC un char ** (l'adresse de TabElem)

BSTRtoASC( sbstr, TabElem);

d'ailleur tu n'as pas allouer de buffer pour TabElem
Commenter la réponse de cs_djl
Messages postés
4
Date d'inscription
lundi 20 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2004
0
Merci
Oui c'est vrai que je veux aller plus vite que ce que j'apprend.
Je n'ai pas trouvé de bon tuto sur les tableaux de chaine de caractère.

En fait j'aimerai savoir.

- quel type de tableau est idéal pour contenir une liste de chaines ASCII de taille variable ( un tableau de chemins de documents par exemple ) et dont le nombre d'éléments est dynamique.

- comment l'alimenter avec des données ComBSTR.

Merci beaucoup de ton aide,
ZeGilooo.
Commenter la réponse de zegilooo
Messages postés
4
Date d'inscription
lundi 20 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2004
0
Merci
Merci de m'avoir mit sur une très bonne piste.

J'ai testé et ça ne fonctionne pas, mais je sens que je ne suis plus très loint maintenant.

j'ai fait :

#define MAXLONGCHAR 256 //longueur max des chaines de caractères
#define MAXNBELEM 200 //nombre max d'éléments dans un tableau

(S'il y a des noms de constantes plus standard, je suis prenneur)

et plus bas ...

char (*ListeCN)[MAXLONGCHAR+1];
ListeCN = malloc( MAXNBELEM * sizeof *ListeCN );

Là, le compilateur me dit
'=' : impossible de convertir de 'void *' en 'char (*)[257]'
je pense que je trouverai de la doc facilement sur malloc pour résoudre ça, non ?

[...]

long tailleListeCN;
char *TabElem;
CComBSTR sbstr;

[...]

BSTRtoASC( sbstr, TabElem);
ListeCN[tailleListeCN] = *TabElem;

Là c'est le problème, j'ai lu de la doc sur les pointeurs, et j'ai tenté de passer en param à BSTRtoASC un **TabElem, *TabElem, TabElem, &TabElem
ya rien pour le satisfaire :-(
pour le moment l'erreur est
'BSTRtoASC' : appel ambigu à une fonction surchargée

Un dernier petit coup de pouce ?
Un grand merci !
ZeGilooo.
Commenter la réponse de zegilooo
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
5
0
Merci
'=' : impossible de convertir de 'void *' en 'char (*)[257]'

parce que apparament tu compile en c++ et en c++ ya pas de conversion implicite avec le void* (qui est le type generique en c)

soit tu compile en c (ce qui serais coherent), soit tu cast (mais la en c++ ce qui serais coherent c'est d'utiliser new )

BSTRtoASC( sbstr, TabElem); devrais marché si ca correspond bien a la fonction decrite plus haut

mais TabElem pointe sur qqchose de non valide

fais plutot

char TabElem[MAXLONGCHAR+1]; // ce qu'il faut en taille

fais attention

ListeCN[tailleListeCN] = *TabElem; ca ne fais surement pas ce que tu veux
Commenter la réponse de cs_djl
Messages postés
4
Date d'inscription
lundi 20 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2004
0
Merci
Encore une fois merci beaucoup pour ton aide qui me permet d'avancer si rapidement.
Commenter la réponse de zegilooo