Page 1 sur 3
[résolu]const char* & PB_String
Publié : mer. 16/mars/2011 1:42
par G-Rom
J'ai une userlib en c++ qui utilise une fonction du type :
const char * PB_foo()
{
std::string * FOO = new std::string("Test");
return FOO.c_str();
}
et le code PB
Debug foo()
le problème , foo() me renvois que dalle
mon .desc , indique bien un retour string ( j'utilise gcc sous linux )
si je met long , je récupère l'adresse du string , que je peek() sous pb pour lire la chaine
de caractère , pas très esthétique.
Re: const char* & PB_String
Publié : mer. 16/mars/2011 1:53
par Warkering
Je ne suis pas assez calé en C++ pour vraiment t'aider, mais peux-tu changer l'argument renvoyés par ton userlib? Car si oui, tu pourrais essayer la méthode Data.
Re: const char* & PB_String
Publié : mer. 16/mars/2011 9:30
par G-Rom
méthode que je ne connais pas la méthode "data"

Re: const char* & PB_String
Publié : mer. 16/mars/2011 10:37
par djes
Pas compris la question

Re: const char* & PB_String
Publié : mer. 16/mars/2011 11:08
par G-Rom
Quelle question ?
je n'ai posé aucune question , j'expose un problème.
j'ai un (const char*) dans un code c++ que je transforme en userlib, et quand j'appelle cette fonction depuis PB , je n'ai aucun retour.
Re: const char* & PB_String
Publié : mer. 16/mars/2011 11:32
par Warkering
Je n'ai pas vraiment compris t'as réponse ( De doit être que je viens de me réveiller et qu'il est 6h20 chez nous!

) mais pour la méthode Data :
http://www.cplusplus.com/reference/string/string/data/.
En gros la méthode renvoie un pointeur.
Sinon, ce serait peut-être le caractère nul de fin de chaîne. Peut-être que ça ne fonctionne pas comme prévu sous PureBasic.
Re: const char* & PB_String
Publié : mer. 16/mars/2011 11:49
par G-Rom
comme la méthode c_str() , sauf qu'a la différence de data() , c_str() à le NULL '0' en fin de chaine.
et const char * est déjà un pointeur vers un tableau de char , un string c'est std::string en c++.
PB dois utilisé un rouage interne pour alloué les strings , mais lequel ?
Re: const char* & PB_String
Publié : mer. 16/mars/2011 12:17
par djes
Ben, moi ça me semble normal. Le code C devrait renvoyer un pointeur vers un objet de type string. Mais comment cet objet, alloué avec le new, peut-il être converti en une chaine constante, c'est à dire un espace mémoire qui ne bougerait pas une fois rempli? Presque sûr que l'objet est détruit avant, et que le pointeur renvoyé renvoie vers ... rien.
Sinon, pour le peeks(), ça permet d'allouer un espace mémoire pour la chaine PB, à la volée. C'est ce qu'il faut faire, il ne s'agit pas d'échanger des pointeurs, mais de copier les données, pour éviter les problèmes!
Re: const char* & PB_String
Publié : mer. 16/mars/2011 12:28
par G-Rom
Ben, moi ça me semble normal. Le code C devrait renvoyer un pointeur vers un objet de type string
Non , car c_str() revois un tableau de char , donc un const char * , comme PB logiquement.
Presque sûr que l'objet est détruit avant, et que le pointeur renvoyé renvoie vers ... rien.
j'ai testé , le pointeur est valide ailleurs que dans la procédure , l'objet est persistant , car si je change le type de retour , càd String en Long
dans le .desc , j'ai bien le pointeur , qui lui est valide.
Peut être que je peut utilisé Peeks() dans un code C++ , après tout on à la lib statique dans le dossier compiler de pb.
Re: const char* & PB_String
Publié : mer. 16/mars/2011 14:05
par djes
G-Rom a écrit :Ben, moi ça me semble normal. Le code C devrait renvoyer un pointeur vers un objet de type string
Non , car c_str() revois un tableau de char , donc un const char * , comme PB logiquement.
Oui, je parlais de l'objet renvoyé par new, dont on utilise une méthode pour renvoyer un pointeur vers une chaine de caractères au format C (soit un tableau de chars, c'est pareil).
G-Rom a écrit :Presque sûr que l'objet est détruit avant, et que le pointeur renvoyé renvoie vers ... rien.
j'ai testé , le pointeur est valide ailleurs que dans la procédure , l'objet est persistant , car si je change le type de retour , càd String en Long
dans le .desc , j'ai bien le pointeur , qui lui est valide.
[/quote] Mmmm, le pointeur est valide, mais est-ce qu'il pointe sur quelque chose?
Re: const char* & PB_String
Publié : mer. 16/mars/2011 14:12
par G-Rom
Oui , peeks me renvois la chaine de caractère , puis je debug à coup de std::cout dans ma source pour en être sur.
le problème viens de l'agencement des strings dans PB , même si au premier abord c'est un vulgaire tableau de char , il y a autre chose en interne , mais quoi ?
Re: const char* & PB_String
Publié : mer. 16/mars/2011 14:22
par djes
G-Rom a écrit :Oui , peeks me renvois la chaine de caractère , puis je debug à coup de std::cout dans ma source pour en être sur.
le problème viens de l'agencement des strings dans PB , même si au premier abord c'est un vulgaire tableau de char , il y a autre chose en interne , mais quoi ?
PB, en tant que BASIC, se doit de bien gérer les chaînes. A mon avis, il doit y avoir quelques infos en plus, du genre si c'est de l'unicode, la taille...
Re: const char* & PB_String
Publié : mer. 16/mars/2011 14:55
par G-Rom
j'ai analyser un pointeur de string , tout autour , rien de bien probant.
il dois y avoir une sorte de table quelque part , avec comme tu dis , des infos , le pointeur en lui même , etc...
un peut comme sont géré les ID de PureBasic.
Re: const char* & PB_String
Publié : mer. 16/mars/2011 17:45
par Warkering
Le mieux serait une réponse de Fred en personne. Essai de le contacter par le forum anglais, on sait jamais. Ou peut-être Freak.
Re: const char* & PB_String
Publié : mer. 16/mars/2011 17:58
par G-Rom
Je n'arrive plus à joindre Fred :/