begin process at 2012 05 29 14:57:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

MFC

 > 

Passage de parametres avec concatenation a une fonction qui attend string


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Passage de parametres avec concatenation a une fonction qui attend string

mardi 3 octobre 2006 à 05:06:38 | Passage de parametres avec concatenation a une fonction qui attend string

develdelphi

Bonjour,

Je vais vous enoncer mon probleme et je tiens a vous remercier de prendre le temps de lire tous ce code.

Je suis dans la fonction OnDestroy() d'une boite de Dialog (IDD_CFGHARDWARE)
et apres avoir modifier une zone Edit Control (IDC_EHARDWAREA)dont la variable est m_iBestCamA (variables
entier contenant 6 chiffres)

je voudrais passer cette variable entiere a une fonction pour ecrire dans la base de registre les modification, cette fonction a pour classe CInit :

Code :

int CInit::Set_Params_Hardware_Config_Init_CamA(CString cstrFileInitA)
{
          m_Register.Write_HKey_Local_Machine 
                    (INIT_HARDWARE_CONFIG,"InitA",cstrFileInit);
          return(0);
}

Donc lorsque je sauve mes parametres je veux mettre ces changements dans le registre grace a cette fonction en fesant comme suit
(MyInit.Set_Params_Hardware_Config_Init_CamA() )

Code :

void CVIewCfgHardware::OnDestroy()
{         
     CFormView::OnDestroy();
          UpdateData(true);    
          
          // TODO: Add your message handler code here
          if(IsModify())
          {
        int iMessage;
          iMessage=MessageBox("Voulez vous sauver les paramètres ?","Sauver paramètres",MB_YESNO);          
                    if(iMessage==IDYES)         
                    {   
                        CInit                 MyInit;
                        sMaximum          MyMaximum;
 
                        MyMaximum=MyInit.Get_Params_Hardware_Maximum ();
                        
                        MyMaximum.iNbZero=m_ctrlCellule.GetCurSel();  
                        MyMaximum.iPointContact=m_iContact;  
                        MyMaximum.iPourcentageIr=m_iInfraRouge;  
                        MyMaximum.iPourcentageLargeur=m_iLargeur;  
                        MyMaximum.iPourcentageSurface=m_iSurface;  
                        MyMaximum.iPourcentageCellule=m_iCellule;  
                        ...................
                        
                        MyInit.Set_Params_Hardware_Maximum(MyMaximum);
   MyInit.Set_Params_Hardware_Config_Distance(m_uiDistance1,m_uiDistance2);
 //  MyInit.Set_Params_Hardware_Config_Init_CamA("chemin"+"BestCamHardware_"+m_IBestCamA+".ini"); 
 //                              MyInit.Set_Params_Hardware_Config_Init_CamB("chemin"+"BestCamHardware_"+m_IBestCamB+".ini"); ); /// Cstring ?
          


 
Questions:

1)Comment dois-je passer mes variables m_IBestCamA et m_IBestCamB qui sont des entiers alors que la fonction attend un string? dois je utiliser  atoi , si oui comment ?

2)Encore une question qui vient, c'est d'appeler le chemin qui se trouve dans une autre Dialog (IDD_REPERTOIRE) sous un Edit Control (IDC_EINITCAMERA)
et dont la variable est m_cstrInitCamera vous l'aurais compris ici c'est deja du string donc je viendrais concatener avec un + mais pour appeler cette variable pourrais remplacer, dans cette instruction "chemin" par : GetDlgItemText( IDD_REPERTOIRE, IDC_EINITCAMERA,
pointstr, Maxcount )

Code :

LPTSTR pointstr; // par exemple ?
int Maxcount = 6;// par exemple ?
........
........
MyInit.Set_Params_Hardware_Config_Init_CamA(GetDlgItemText(
  IDD_REPERTOIRE, IDC_EINITCAMERA,
pointstr, Maxcount )+"BestCamHardware_"+m_IBestCamA+".ini");
........
.........

Est ce que la methode est envisageable je ne connais pas bien cette fonction?

Merci de votre aide

 

mardi 3 octobre 2006 à 16:49:19 | Re : Passage de parametres avec concatenation a une fonction qui attend string

buno

Administrateur CodeS-SourceS
Salut,

1. Si tu regarde la classe CString, tu verras qu'elle contient une méthode Format() qui s'utilise comme un sprintf() classique:
CString cstrInteger;
int i=12;
cstrInteger.Format("%d",i);

2. Tu peux évidemment récupérer ton chemin qui vient d'une boite de dialogue, pour peu qu'elle ne soit pas détruite mais, pour construire le chemin de ton fichier, il fau tle faire par étapes:
CString cstrRepertoire, cstrFichier;
GetDlgItemText(IDC_EDIT_REPERTOIRE,cstrRepertoire);
cstrFichier.Format("%s\\BestCamHardware_%s.ini",cstrFichier,m_IBestCamA);

En espérant que cela t'aidera...
NB: Evites de récupérer tes paramètres dans la méthode OnDestroy(). Fais le plutôt dans la fonction OnOK()...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
mercredi 4 octobre 2006 à 09:55:02 | Re : Passage de parametres avec concatenation a une fonction qui attend string

develdelphi

Salut,

Merci beaucoup maintenant j'ai ça comme code pour la 1 ere question

 1 )
Dans un premier temps par rapport ace qu'on a echangé :

Pour la reponse 1:

Code:
///
CString strcam;

strcam.Format("%d",m_iBestHardwareA);

MyInit.Set_Params_Hardware_Config_Init_CamA(strcam);

///

Je crois que c'est bon par contre le %d veut dire qu'il s'agit d'un entier tout simplement ?


Pour la reponse 2  :

ici par contre ce n'est pas très clair:

////
("chemin"+"BestCamHardware_"+
////
"chemin" correspond à ce qu'il y a dans le control Dialogue (IDD_REPERTOIRE) la variable m_cstrInitCamera
"BestCamHardware_" correspond à une chaine constante  qui viendra s'ajouter au chemin. Dialog (IDD_CFGHARDWARE) la variable m_iBestCamA 

Car je n'ais pas bien compris 'cstrRepertoire' correspond t-il a '%s\\BestCamHardware_%s.ini' ? et comment implemeter
les valeurs obtenues par les differentes etapes à l'instruction  :
 
////
' MyInit.Set_Params_Hardware_Config_Init_CamA("chemin"+"BestCamHardware_"+m_IBestCamA+".ini"); '
////



2)
Dans un second temps, comme tu peux le voir le code a changé (reponse 1), en fait je dois changer le principe de programmation pour eviter certaines confusions, Je m'explique en fait la manière dont je t'avais dit c'était de mettre sur la meme cle de registre une fois uniquement (si on est dans le Dialogue (IDD_CFGHARDWARE) le numéro m_iBestHardwareA convertit en string. Et une autre fois (si on est dans le Dialogue IDD_REPERTOIRE)  le chemin complet ( chemin+ le fichier + le numero de la camera) du repertoire ou se trouve le fichier ini de la camera. 

Bref ca devient complexe, autant avoir trois clés de regsitre:
 
-la première pour les deux cameras, par exemple "Directory Hardwares" devant avoir comme valeur le seul repertoire par defaut. Dans ce repertoire il ya les fichiers .ini des deux cameras.

-la seconde une pour chaque caméra, par exemple "Num A" devant avoir comme valeur le numero de série de la camera fournit par la DLL de la camera. 

-la troisième une pour chaque caméra, sera la clé actuelle "InitA" ou on mettra comme valeurs le chemin complet (  le répertoire par defaut + le nom du fichier (BestCamHardware_) au quel on concatenera le numero de série de la camera et le .ini )
 
Et donc quand il le faudra on mettra dans dans le registre à la clé "InitA" pour la caméra A les données nécessaires afin qu'elle puisse bien s'initialiser.

Pour le moment je réalise les differents fonctions mais j'airais besoin de comprendre la question 2 car je devrais faire justement des concatenations avec des variables se trouvant dans differents endroits, pourrais tu m'aider a cet effet là?
 
Merci bien

mercredi 4 octobre 2006 à 10:31:19 | Re : Passage de parametres avec concatenation a une fonction qui attend string

buno

Administrateur CodeS-SourceS
Oups, je vois que je t'ai enduis d'erreurs... Je vais essayer d'y remédier.

Pour la partie 1, le "%d" signifie effectivement que tu vas lui donner un entier. %f pour un flottant, %s pour une chaine de caractères.
J'en viens donc à la partie 2, la concaténation de chaines pour avoir le chemin complet. Si j'ai bien compris, il y a 4 parties dans cette chaine, dont 2 fixes:
- le répertoire par défaut que tu récupères dans une boite de dialogue: GetDlgItemText(IDC_EDIT_REPERTOIRE,cstrRepertoire);
- le nom du fichier qui est fixe, à savoir "BestCamHardware_"
- le numéro de série de la caméra, qui est variable et que tu as au format entier et non string (dis moi si je me trompe)
- l'extension du fichier fixe, à savoir ".ini"

Donc, pour reconstituer ton chemin complet, il faut faire la même manip que dans la 1ère partie, cad créer ta chaine à partir de morceaux fixes (que tu écris tels quels) et de morceaux variables (que tu spécifie avec des %):
CString cstrCheminComplet;
cstrCheminComplet.Format("%s\\BestCamHardware_%d.ini",cstrRepertoire,m_iBestHarwareA);

Est-ce plus clair?

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
jeudi 5 octobre 2006 à 16:41:09 | Re : Passage de parametres avec concatenation a une fonction qui attend string

develdelphi

Salut,

Désolé pour ce retard à repondre, en effet je devais avance sur d'autres parties du programme.
Merci beaucoup, c'est plus clair comme ça j'ai ceci maintenant qui marche bien:

////////
FSRetVal tmp;
  string strFile;
  CInit m_Init;

  if(m_bver==0) 
   strFile=string((LPCTSTR)(m_Init.Get_Params_Hardware_Config_FileInit()+"BestCamHardware"+m_Init.Get_Params_Hardware_Config_FileInit_NumA()+".ini"));
  else
   strFile=string((LPCTSTR)(m_Init.Get_Params_Hardware_Config_FileInit()+"BestCamHardware"+m_Init.Get_Params_Hardware_Config_FileInit_NumB()+".ini")); 
//////////////

En fait tu as pu voir que pour fournir j'ai utilisait un string au lieu d'un entier pour les numeros.
De plus, je n'ai pas employe ta  fonction GetDlgItemText car  avec ceci :

///
GetDlgItemText(IDC_EDIT_REPERTOIRE,cstrRepertoire);
///

Apparement ma classe ne le connaisait pas et qu'il falait la declarer (pourquoi ?) et ca devient pas tres propre au niveau du programme
qui est un programme lourd avec bcp de classes et multithreads.


Enfin c'est pas ca le plus important car pour le moment je dois faire d'urgence une conversion de int vers string
pour initialiser un objet BestCamHardware  avec un if else et mettre comme parametre à la paranthese de BestCamHardware(); le numero
cette portion de code:

////////test constructeur avec boleen 
   CHardware::CHardware(bool bver)   
{  
 m_bver=bver;
 m_pHardware=0;
 m_pHardware = new BestCamHardware();
 TRACE("Début tache Hardware\n");
}
////////

Et je me demande comment je pourrais mieux le faire, avec la fonction atoi() peut etre ? 
Comme ceci: 

////////test constructeur avec boleen
   CHardware::CHardware(bool bver)  
{  
  m_bver=bver;
  int temp;
  if(m_bver==0)
   temp =   int atoi (m_Init.Get_Params_Hardware_Config_FileInit_NumA());
  else
    temp =  int atoi (m_Init.Get_Params_Hardware_Config_FileInit_NumB());
  
  m_pHardware=0;
  m_pHardware = new BestCamHardware(temp);

 TRACE("Début tache Hardware\n");
}
//////

Je sais pas si c'est l'idéal de mettre des if() dans le constructeur ?
Mais sinon est ce que le programme est juste?

Encore merci


jeudi 5 octobre 2006 à 16:53:58 | Re : Passage de parametres avec concatenation a une fonction qui attend string

develdelphi

Salut,

Juste une chose encore pour la fonction atoi() :

#include <stdlib.h>int atoi(const char *str);
The atoi( ) function converts the string pointed to by str into an int value.
 
dans la paranthese il  faut passer un pointeur c'est ca que ca veut dire au fait le const char ? 
 
Merci


DevelDelphi :)

jeudi 5 octobre 2006 à 16:58:02 | Re : Passage de parametres avec concatenation a une fonction qui attend string

buno

Administrateur CodeS-SourceS
atoi() te permet, comme son nom l'indique de passer d'une chaine de caractères vers un entier (ASCII To Integer). Or, tu veux le contraire si j'ai bien compris.
Utilise donc sprintf() qui te permet de convertir "n'importe quoi" en chaine de caractères.

sprintf(strCam, "%d", m_Init.Get_Params_Hardware_Config_FileInit_NumA());

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
vendredi 6 octobre 2006 à 00:41:31 | Re : Passage de parametres avec concatenation a une fonction qui attend string

develdelphi


Salut,

en fait c'est bien ce que j'ai dit cette fois je veux l'inverse que ce que je t'avais demande au depart.
En effet je veux convertir du string en integer car c'est vrai je te l'ai pas dit pour instancier l' objet de la classe BestCamHardware
il a besoin qu'on lui passe un integer comme argument (temp) dans cette instruction:

////
m_pHardware = new BestCamHardware(temp)
////

La je suis sur c'est bien du string vers l'integer que je veux convertir par contre je me demande si je dois pas mettre
(LPCTSTR) dans la fonction atoi comme j'avais fait pour mon premier probleme:  strFile=string((LPCTSTR)(m_Init.Get_Params_Hardware_Config_FileInit()+"BestCamHardware"+m_Init.Get_Params_Hardware_Config_FileInit_NumA()+".ini"));

Merci




DevelDelphi :)
vendredi 6 octobre 2006 à 09:27:04 | Re : Passage de parametres avec concatenation a une fonction qui attend string

buno

Administrateur CodeS-SourceS
Ok, on va y arrivé
Bon. Tu as le numéro de ta caméra dans une string strNumeroCamera.
Tu veux récupérer ce numéro dans un entier.
Effectivement, il faut utiliser atoi()...avec une petite subtilité: atoi() attend en paramètre un char *. Or tu as une string. Il faut donc convertir ta string en char *: strNumeroCamera.c_str().

string strNumeroCamera="13";
int iNum = atoi(strNumeroCamera.c_str());

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
lundi 9 octobre 2006 à 09:10:27 | Re : Passage de parametres avec concatenation a une fonction qui attend string

develdelphi


Salut,

Merci effectivement j'ai pour finir ceci comme code:

///
  CHardware::CHardware(bool bver)  
{  
  m_bver=bver;
  string strTemp;
  CInit m_Init;
 
 if(m_bver==0)
   strTemp = (LPCTSTR)m_Init.Get_Params_Hardware_Config_FileInit_NumA();
 else
   strTemp = (LPCTSTR)m_Init.Get_Params_Hardware_Config_FileInit_NumB();
 int iTemp = atoi(strTemp.c_str());
   // temp =  int atoi (m_Init.Get_Params_Hardware_Config_FileInit_NumB());
  m_pHardware = 0;
  m_pHardware = new FastcomHardware(iTemp);
 TRACE("Début tache Hardware\n");
}
///


Qui a l'air de bien fonctionner :)  
Je ne savais comment convertir en chaines de caractères apparement c'était cette fonction  c_str().

C'est bien gentil à toi Buno merci


1 2

Cette discussion est classée dans : fonction, params, hardware, mymaximum, myinit


Répondre à ce message

Sujets en rapport avec ce message

Par défaut Fonction de conversion d'un type specifique vers un int en retour de fonction [ par develdelphi ] Bonjour, Voici mon problème; en fait j'ai un grand programme relatif a un système de detections.Ce programme a plusieurs threads qui tournent ensemble converion d'un type specifique vers un entier lors du retour d'une fonction [ par develdelphi ] Bonjour, Voila comme le titre le dit bien, je veux convertir un type donne ( FSRetval ) vers un type ( int ) lors du retour vers la fonction. Voici l transfere de pointeur [ par stefbuet ] salut, j'ai créé un pointeur dans une fonction, comment je peux faire pour pouvoir le réutiliser dans une autre fonction, ou mieux l'utiliser partous fonction de hashage hash_map [ par Sk8yo ] bonjour,voila mon probleme :j'ai une structure hash_map (STL) pour laquelle j'ai besoin de créer une fonction de hashage perso.J'ai cherché un peu par probleme fonction prenant un std::istringstream [ par gg_the_boss ] tout est ici (le code, les messages d'erreurs, les explications): http://www.rafb.net/paste/results/JKU81J25.htmlmerci d'avance pour vos reponses :D Graphique f(x)=x^p [ par dustez ] On me demande de réaliser un programme affichant sous forme textuelle des graphiques représentant les fonction du type f(x)=x^p, à partir des paramètr Conditions répétitif - debuggeur [ par juki_webmaster ] Salut, Pour achever le developpement de mon logiciel j'ai eu l'idée de concevoir un debuggeur maison et de l'intégré par la suite en "dur" dans les s qsort fonctionnement? [ par deck_bsd ] Bonjour a tous,Voila, je voudrai trier ce tableau :char nt[][100] = {"un","trois","quatre","cinq","a","bb","b","axxxxxxxxxxxxxxxxxxx"};Avec la fonctio c++ [ par aminegenie ] je veux une fonction dans le c++ qui me permet d'entrer une variable ou un caractere ou elle me lit le bouton en cours de la lecture de c++ une autre fonction qui crash à retardement [ par clad67150 ] Bonjour à tous !Je viens poster parce que j'ai un petit problème, j'essaye de faire une fonction de debug qui marche comme un printf() et qui affiche


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 7,285 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales