electroonn
Messages postés49Date d'inscriptionmardi 14 février 2006StatutMembreDernière intervention27 novembre 2007
-
28 mars 2007 à 01:01
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 2016
-
7 avril 2007 à 19:41
Bonjour,
j'essaye de faire une application qui fait appelle a une boite de dialogue pour le saisi des informations de l'utilisateur, j'ai fait alors un porjet MFC de type boite de dialogue.
le probleme survient alors quand je veux prendre les données entrées par l'utilisateur et les affecter a mes variables, exemple:
void CGoBackNDlg::OnOK()
{
UpdateData(TRUE);
CGoBackNApp Client(m_numPort,m_IPaddr);
Client.FileSize(m_FileName);
Client.ReadFile(m_FileName);
Client.SendFileInfo(m_FileName);
}
c'est a dire qu'une fois l'utilisateur appuit sur ok, je veux recuperer les variables m_numPort, m_IPaddr et m_FileName qui sont membre de la classe CGoBackNDlg derivé de CDialog.
en executant le programme il me sort alors le message "Debug Assertion Failed".
vous auriez une idee peut etre?
merci
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 28 mars 2007 à 14:59
Premierement il faut que tu mettes le code qui reference client apres le code qui verifie le OnOK() du dlg;
Ensuite vérifie que tu as bien lié tes variables par VALEUR aux champs du dialog.
EX : m_numPort doit etre créé sur ton champ editBox en tant que int par valeur (pour que le UpdateData() marche)
Dans ton dialog principal :
#include "GoBackNDlg.h"
CGoBackNDlg dlg;
if( dlg.DoModal() == IDOK )
{
// ici le code qui référence les données
CGoBackNApp Client(m_numPort,m_IPaddr);
Client.FileSize(m_FileName);
// ECT...
}
else
{
// Les données ne sont pas bien formatées
}
Ce qui te permets de vérifier les entrées utilisateur dans le OnOK()
du dlg et renvoyer different de IDOK si les données ne sont pas bien formatées.
A mon avis tu as un problème de liaison de variables membres avec les controles du dlg.
Car une de ces variables n'étant pas initialisée, elle provoque un debug assert dans ton code qui les utilise.
electroonn
Messages postés49Date d'inscriptionmardi 14 février 2006StatutMembreDernière intervention27 novembre 2007 28 mars 2007 à 19:25
voici le code de la classe CGoBackNApp dont client est un objet:
class CGoBackNApp : public CWinApp
{
private:
sockaddr_in serveur_addr; //adresse du serveur
sockaddr_in client_addr; //adresse du client
SOCKET sockfd;
int server_addrLen;
int client_addrLen;
timeval TimeOut;
char Buffer[10][1400];
int size;
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 28 mars 2007 à 21:58
Et bien pour que le updateData marche, il faut que tu crée tes variables membres en liaison avec les controles grace à :
virtual void DoDataExchange(CDataExchange* pDX);
avec pour des liaisons VALEUR par exemple :
DDX_Text(pDX, IDC_UNIDCONTROLE, m_sMembreCString);
ou des liaisons REF :
DDX_Control(pDX, IDC_UNIDCONTROLE, m_MembreEditBox);
electroonn
Messages postés49Date d'inscriptionmardi 14 février 2006StatutMembreDernière intervention27 novembre 2007 28 mars 2007 à 22:32
moi ce que j'ai fait, c'est que pour chaque control j'ai ajouté une variable. dans ma boite de dialogue j'ai 3 EditBox, et pr chaqu'une j'ai ajouté une variable avec la ClassWizar a savoir m_numPort, m_IPaddr et m_FileName.
pour les liaisons, je pense que c géré automatiquement, en voici pr mon exemple:
electroonn
Messages postés49Date d'inscriptionmardi 14 février 2006StatutMembreDernière intervention27 novembre 2007 28 mars 2007 à 22:36
le probleme survient a la ligne suivante
CGoBackNApp Client(m_numPort,m_IPaddr);
qd je declare un objet CGoBackNApp et qd je vx les initialiser avec les variables de la boite de dialogue, et biensur le probleme persiste aussi qd j'utilise des fonctions qui prennent en parametre ces memes variables.
pour contourner ce probleme j'ai supprimer la class CGoBackNApp , et j'ai intégré ces attributs et ces méthodes a la classe de la boite de dialogue, mais c une solution provisoire, et j'aimerais mieux avoir une classe apart pr ma propre utilisation.
Nemesis007
Messages postés4Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention 7 avril 2007 7 avril 2007 à 13:30
J'ai à peu près le même problème, dès que mon programme arrive à un UpdateData(), il fait un "Debut Assertion Failed" ... Pourtant, mon programme passe une fois dans la boite de dialogue permettant d'initialiser les valeurs des EditBox et biensur là ca marche parfaitement :(