[résolu]const char* & PB_String

Programmation d'applications complexes
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

[résolu]const char* & PB_String

Message 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.
Dernière modification par G-Rom le jeu. 17/mars/2011 0:59, modifié 1 fois.
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

Re: const char* & PB_String

Message 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.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: const char* & PB_String

Message par G-Rom »

méthode que je ne connais pas la méthode "data" :wink:
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: const char* & PB_String

Message par djes »

Pas compris la question :?:
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: const char* & PB_String

Message 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.
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

Re: const char* & PB_String

Message 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! :mrgreen: ) mais pour la méthode Data : http://www.cplusplus.com/reference/string/string/data/.
En gros la méthode renvoie un pointeur. :wink:

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.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: const char* & PB_String

Message 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 ?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: const char* & PB_String

Message 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!
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: const char* & PB_String

Message 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.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: const char* & PB_String

Message 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?
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: const char* & PB_String

Message 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 ?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: const char* & PB_String

Message 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...
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: const char* & PB_String

Message 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.
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

Re: const char* & PB_String

Message 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.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: const char* & PB_String

Message par G-Rom »

Je n'arrive plus à joindre Fred :/
Répondre