2009-08-12 6 views
0

Encore une fois, je suis struggeling avec Symbians Descripteurs ...Problèmes avec assignation de descripteurs Symbian

char fileName[128] = "somethingsomething"; 

Ensuite, je puis en ont l'objet TEntry qui a un iName membre. À cet iName je voudrais assigner mon nom de fichier. J'ai essayé de le faire comme suit:

TEntry anEntry; 

anEntry.iName.Copy((TText8*)rEntity->fileName); 

-

no instance of overloaded function " TBufC::Copy [with S=256]" matches the argument list 
     argument types are: (TText8 *) 
     object type is: TBufC<256> 
        anEntry.iName.Copy((TText8*)rEntity->fileName); 

Dois-je utiliser une autre fonction pour copier le nom du fichier dans entry.iname?

Un grand merci

+0

Je ne suis pas convaincu que ce soit un problème de descripteur. Que comptez-vous faire avec l'objet TEntry? –

Répondre

0

Enveloppez la fin de zéro const char [] données dans un TPtrC pour en faire un descripteur qui peut être transmis à Copy. Cependant, TEntry::iName est une constante TBufC mais vous pouvez appeler Des sur elle pour obtenir un TPtr modifiable:

anEntry.iName.Des().Copy(TPtrC8((TText8 *)rEntity->fileName)); 
+0

Merci pour votre réponse, mais le problème reste le même ... Est-il possible que ce membre iName n'a pas de méthode de copie bien qu'il soit de type TBufC comme description: TBufC iName; Le nom du fichier relatif au répertoire propriétaire, avec un maximum de caractères KMaxFileName. –

+0

anEntry.iName = _L ("Test"); Cela fonctionne ici ... me rend fou les descripteurs. Y at-il peut-être quelque chose comme un strcpy dans Symbian sans utiliser le stdlib? –

+0

Oui .. Quelque chose comme 'strcpy' est' TDes :: Copy'. J'ai mis à jour ma réponse pour répondre au fait que TEntry :: iName est un const 'TBufC'. – laalto

1

TBufC est non modifiable (C est pour "constante"). Il n'a aucune fonction de copie.

http://developer.symbian.com/main/documentation/sdl/symbian94/sdk/doc_source/reference/reference-cpp/E32_EKA2/TBufCClass.html

Essayez quelque chose comme:

iName.Des().Copy(TPtrC8((TText8*)fileName)); 

ou

TBuf<256> tmp; // or HBuf if you're worried about using so much stack 
tmp.Copy(TPtrC8((TText8*)filename)); 
iName = tmp; 

Si vous ne pouvez pas changer le type de iName, vous pouvez peut-être changer fileName être stockés dans un descripteur au lieu d'un tableau de caractères? Comme vous l'avez découvert, mélanger les deux est douloureux. Tout cela suppose que votre caractère de 8 bits est ascii ou ISO-latin, pas UTF-8. Si ce dernier, vous devez également convertir le codage de caractères.

+0

Très bien, cela a du sens. Cependant, le problème est que j'essaie d'implémenter une interface, donc je ne suis pas capable de changer le type de membre de données iName. Y a-t-il un moyen d'affecter le nom de fichier avec la conversion à la constante peut-être: P –

+0

Vous pouvez utiliser operator = on TBufC. Je suis un peu rouillé, mais essayez quelque chose comme iName = TPtrC8 (fileName). Notez que vous pouvez appeler Des() sur un TBufC pour obtenir un descripteur modifiable, que vous pouvez ensuite appeler Copier. –

+0

Merci pour ce onebyone. iName = TPtrC8 (nomfichier) ne fonctionne malheureusement pas. Cependant, je devrais dire que fileName n'est pas un char constant car il change pendant l'exécution du programme. J'espère que ce n'est pas un problème, je peux toujours l'assigner à cette variable TBufC! –