wiool
Messages postés7Date d'inscriptionjeudi 10 février 2005StatutMembreDernière intervention 2 juin 2005
-
2 juin 2005 à 12:42
MNEMONIC
Messages postés59Date d'inscriptiondimanche 19 décembre 2004StatutMembreDernière intervention 1 septembre 2006
-
2 juin 2005 à 17:51
Voila,
En c++ .NET,
J'ai un thread principal avec mon form principal (form1) et un objet (ClientPlayer).
Quand j'appelle une boite de dialogue de configuration, l'utilisateur rentre l'addresse ip dans une textbox et clique sur OK.
Le probleme: la string est detruite quand le trhread de la fenetre de dialogue est termine.
Du code, ca expliquera mieux:
// la classe clientPlayer contient l'ip du client
class ClientPlayer
{
// la classe form1 est le formulaire principal
public
__gc
class Form1 :
public System::Windows::Forms::Form {
.
.
.
// ici j'appelle la boite de dialogue config
private
: System::Void form1_Load(System::Object * sender, System::EventArgs * e) {
cp =
new ClientPlayer();
configDlg =
new config(cp);
string ip=cp.getIp() <--------------- C'a renvoie rien, nada, du vent !!!
}
}
//la classe de la boite de dialogue config
public
__gc
class config :
public System::Windows::Forms::Form {
config(
ClientPlayer* clip) {
cp=clip;
InitializeComponent();
}
private:
ClientPlayer *cp;
// click sur le bouton OK
private: System::Void button1_Click(System::Object * sender, System::EventArgs * e) {
string str=(const
char *)(Marshal::StringToHGlobalAnsi(
this->textBox1->Text)).ToPointer(); // ici je convertie la text box IP en string
this->cp=
new ClientPlayer(ip);
this->cp->getIp(); <---------------- par contre ici ca renvoie bien l'ip !!! Aarghh
}
}
J'ai cru comprendre que les thread (et donc mon thread de boite de config) etait pas safe et que ils dtruisent tout les objets crees quand on les quite, ok, mais comment j'lui dit de garder certains ?
wiool
Messages postés7Date d'inscriptionjeudi 10 février 2005StatutMembreDernière intervention 2 juin 2005 2 juin 2005 à 14:44
Ben ouais, j'y avais penser, mais ca veuix pas marcher non plus... faut relire mes cours sur les pointeurs peut etre ? En tout cas, voice le nouveau code en faisant passer un parametre string* ip a laboite de dialogue config.... mais ca veux rien faire... Des idees ?
// la classe clientPlayer contient l'ip du client
class ClientPlayer
{
// la classe form1 est le formulaire principal
public
__gc
class Form1 :
public System::Windows::Forms::Form {
.
.
.
// ici j'appelle la boite de dialogue config
private
: System::Void form1_Load(System::Object * sender, System::EventArgs * e) {
cp =
new ClientPlayer();
string* ipadd=new string("");
configDlg =
new config(cp,ipadd);
string ip=cp.getIp() <--------------- C'a renvoie rien, nada, du vent !!!
}
}
//la classe de la boite de dialogue config
public
__gc
class config :
public System::Windows::Forms::Form {
config(
ClientPlayer* clip,string* ipadd) {
cp=clip;
ip=ipadd
InitializeComponent();
}
private:
ClientPlayer *cp;
string* ip;
// click sur le bouton OK
private: System::Void button1_Click(System::Object * sender, System::EventArgs * e) {
ip=new string((const
char *)(Marshal::StringToHGlobalAnsi(
this->textBox1->Text)).ToPointer()); // ici je convertie la text box IP en string
this->cp=
new ClientPlayer(ip);
this->cp->getIp(); <---------------- par contre ici ca renvoie bien l'ip !!! Aarghh
}
}
J'ai
MNEMONIC
Messages postés59Date d'inscriptiondimanche 19 décembre 2004StatutMembreDernière intervention 1 septembre 2006 2 juin 2005 à 17:51
...Je pensais plutôt lui passer la string dans le getip pour lui mettre la valeur directement...
D'ailleurs, on m'a souvent conseillé de récupérer les valeurs dans les paramètres d'une fonction (ou autre) plutôt que dans le return, et ainsi garder le return pour renvoyer un état de fonctionnement (ok, ko, ...)