IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

conversion entier-chaines de caracteres pour Edit control en entier


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut conversion entier-chaines de caracteres pour Edit control en entier
    Bonjour,

    J'ai une form (Dialog) qui contient plusieurs zones d'Edit Control en Visual C++ et ca ressemble un peu a ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    DDX_Text (pDX, IDC_EzoneA, m_ivarzoneA) ;
    DDX_Text (pDX, IDC_EzoneB, m_ivarzoneB) ;
    Avec m_ivarzoneA et m_ivarzoneB etant des entiers pour la zone Edit Control.

    Voila ces zones permettent d'entrer des chiffres correpondant a une partie d'une chaine de caractere, exemple dans la case zone A j'entre le numero
    176 je veux creer une fonction qui utilse ces chiffres pour comparer si il s'agit
    du bon numero de fichier dans un chemin donne par exemple : C:/dossier/data/filezonea_176.ini

    Pour extraire le chiffre 176 de cette chaine la fonction atoi ne retourne pas
    176 a ma variable m_ivarzoneA.

    Pouvez vous m'aider a convertir et/ou selectionner les numeros d'une chaine?

    devrais je mettree cette fonction dans la fonction DoDataExchange de mon Dialog?

    Merci

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut ,
    pas trés clair tout ça ,
    tu veux extraire le nombre de ta chaine c'est ça ?
    au lieu d'extraire tu peux comparer (si j'ai bien compris le pb)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CString str="C:/dossier/data/filezonea_176.ini";
    CString nb;
    nb.Format("_%03d",m_ivarzoneA); // conversion de l'entier en chaine.
    if(str.Find(nb)!=-1)
    {
    // chaine trouvée.
    }

  3. #3
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Salut Farscape,

    Merci de ta reponse, voila je vais essayer de t'expliquer ce que je veux faire.

    Remarque:
    Il s'agit d'un programme que j'ai recuperer dans ce programme multithread, il y a une tache Background, une tache Dispatcher qui gere les differentes autres taches : de la camera
    des capteurs
    des acquisitions ( des capteurs et de la camera )
    et des traitements.
    Mon objectif est d'implementer une deuxieme camera. Et initialiser l'une d'elle
    si les deux sont presentes sinon la premiere par defaut (comme au depart).

    Mes principales classes sont : CMyPROGDoc
    CInit
    CViewCfgHardware
    CThreadHardware
    CHardware
    CBestCamHardware ( classe de la camera,
    cette classe communique avce la Dll)

    Les relations d'heritages sont comme suit des parents aux enfants : CCThreadHardware -> CHardware -> CBestCamHardware

    Je dispose donc d'une boite de dialoge (ViewCfgHardware.rc)avec plusieurs zones d'Edit Control en Visual C++ et deux de ces zones dont les variables membres sont m_iBestCamA et m_iBestCamB respresentent des entiers correpondant a des numeros. Ces numeros representent les numeros de series de deux vraix objets hardware et qui sont donc representes par deux objets de classe. Ces objets hardware sont des cameras relies aux ports USB du PC.

    Principe du systeme:
    Si on suppose qu'on a un couloir controlé et dont
    l'acces se fait par deux portes A et B et au dessus de chacunes il y a une camera, il ya deux mode de controles:

    1) On controle les 2 sens
    Les deux portes sont pret a prende des images (mais a aucun moment les images sont prises en meme temps) si une personne venait a se presenter devant la porte B il faut un mecanisme (capteurs de presences) qui enclenche la camera du coté B.
    2) On controle le sens A vers B
    La c'est facile il n'y a que la camera A qui fonctionne et la camera B ne s'initialisera meme pas au demarrage du systeme

    Remarque: au demarrage du systeme on initialisera selon le mode de controle soit que la camera A soit les deux.

    Mon objectif est d'initialiser la bonne camera en fonction d'une part le numero de serie de la camera et qui se trouvera dans le registre et dans le dialogue ViewCfgHardware.rc dans les 2 zones d'Edit Control ( un numero pour chaque camera, ces numeros sont inscrit sur les cameras ) et d'une autre part de differentes parametres externes tel que capteurs qui dit d'activer tel camera etc.., de mon programme.

    J'ai apres analyse, si je comprends bien, que une classe general CInit set les config generales du systeme ( mode de fonctionnement, fichiers, repertoires, types capteurs, etc...)
    Cela voudrait dire sans doute qu'il set les config enregsitrés lors de la derniere ouverture-fermeture du programme ?

    Et mes controles dialogues vont generalement faire des get (lors de l'ouverture de la dialogues pour remplir les zones Edit Control etc,.) et parfois des set si par exemple on venait a modifier manuellement sur une zone de controle la configuration par exemple du hardware (camera).

    Si je part de l'hypothese ou je mets manuellement les numeros de series dans le registre Alors j'ai ca comme code mais je ne sais pas si c'est la bonne methode?

    Les principales parties de codes que je modifie porte sur ceux de la classe Hardware et CViewCfgHardware ou je fais mes concatenations de chaines. Est ce que la structuration est juste ? :

    CHardware
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    	if(m_bver==0)	////test
                          string strFile((LPCTSTR)chemin+"BestCam"+m_Init.Get_Params_Hardware_Config_FileInit_CamA())+".ini"; 
    		else
    			string strFile((LPCTSTR)m_Init.Get_Params_Hardware_Config_FileInit_CamB()); ////test
    		tmp = m_pHardware->SetConfigFilePath((char*)strFile.c_str());
    			if(tmp!= FS_SUCCESS)
    			{	
    			TRACE("SetConfigFilePath failed\n");
    			return 1;
    			}
     
    			tmp = m_pHardware->Initialize();

    Dans cette premiere partie de code, ce terme "m_Init.Get_Params_Hardware_Config_FileInit_CamA())" correspondrait donc au numero de la camera A et ce numero se trouverait aussi dans la zone Edit control de la CViewCfgHardware.

    Et au niveau de la classe CViewCfgHardware

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    //ViewCfgHardware.CPP        OnDestroy() 
     
    void CViewCfgHardware::OnDestroy() 
    {
    	CFormView::OnDestroy();
     
    	// TODO: Add your message handler code here
    		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 ();		
    			...........
     
    			MyInit.Set_Params_Hardware_Maximum(MyMaximum);
    			MyInit.Set_Params_Hardware_Config_Distance(m_uiDistance1,m_uiDistance2);
     
    			 //  if (m_iBestCamA == True)                                   
           MyInit.Set_Params_Hardware_Config_Init_CamA(CString cstrFileInit+"BestCamHardware_"+m_IBestCamA+".ini"); 
    		        // else if (m_iBestCamB == True)                          
           MyInit.Set_Params_Hardware_Config_Init_CamB(CString cstrFileInit+"BestCamHardware_"+m_IBestCamB+".ini"); ); /// Cstring ?
    			// else                                                     
    		}		
    	}
    }
    Et ici : MyInit.Set_Params_Hardware_Config_Init_CamA(CString cstrFileInit+"BestCamHardware_"+m_IBestCamA+".ini");
    correspondrait au a definir le chemin du bon fichier ini avec le bon numero
    exemple : C:/System/PROG/Includes/BestCamHardware_123456.ini

    Voila. Est ce que c'est juste n'ai je rien omis ?


    Ci dessous je mets les codes associes au point que je viens de relever.
    Il y a une partie des differentes classes avec certaines fonctions cela devrait permettre de mieux cerner la logique des classes et peut etre si vous pouviez m'apporter des conseils supplementaires. Merci

    CMyPROGDoc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
     
    // le fichier header
    class CThreadDispatcher;
     
    class CMyPROGDoc : public CDocument
    {
    protected: // create from serialization only
    	CMyPROGDoc();
    	DECLARE_DYNCREATE(CMyPROGDoc)
     
    // Attributes
    public:
    // Operations
    public:
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CMyPROGDoc)
    	public:
    	virtual BOOL OnNewDocument();
    	virtual void Serialize(CArchive& ar);
    	//}}AFX_VIRTUAL
    // Implementation
    public:
    	virtual ~CMyPROGDoc();
    #ifdef _DEBUG
    	virtual void AssertValid() const;
    	virtual void Dump(CDumpContext& dc) const;
    #endif
    	int		Process(unsigned int uiProcess);
    	int		Init_Vue_PROG(CView *pView);
    	int		Init_Vue_LateralCmd(CView *pView);
    	int		Init_Vue_SasCmd(CView *pView);
    	int		Init_Vue_Visualisation(CView *pView);
    	int		GetReadWord(unsigned int uiWord,unsigned int uiNb,short *pDestination);
    	.........................................
    	bool		isProblemeHardware();
    	bool		isProblemeTraitement();
    	bool		isProblemeAcquisition();
    	bool		isProblemeModbus();
    	bool		isProblemeWago();
    	bool		isProblemeTache();
    	bool		isInitTraitement();
    	bool		isInitAcquisition();
    	bool		isIniteHardware();
    	bool		isInitModbus();
    	bool		isInitWago();
    	bool		isInitTache();
     
    	int     Draw(CString cstrFileDraw);
    	void		OpenSasVisualisation();
    	void		OpenSYSTEMVisualisation();
    protected:
    private:
    	// Differentes vues
    	CView					*m_pPROGView;
    	CView					*m_pLateralView;
    	CView					*m_pSasView;
    	CView					*m_pVisualisationView;
    	// Les différents parametre utilisé pour chaque tache.
     
    	CInit					m_Init;	
    	CThreadDispatcher		*m_pThreadDispatcher;
    	CThreadModbus			*m_pThreadMobus;
    	CThreadWago				*m_pThreadWago1;
    	CThreadWago				*m_pThreadWago2;
    	//////
    	//CThreadHardware			*m_pThreadHardware;      //TEST
    	CThreadHardware			*m_pThreadHardware1;     //TEST
    	CThreadHardware			*m_pThreadHardware2;     //TEST
    	// Generated message map functions
    protected:
    	//{{AFX_MSG(CMyPROGDoc)
    	afx_msg void OnFileOpen();
    	afx_msg void OnUpdateFileOpen(CCmdUI* pCmdUI);
    	afx_msg void OnPasswdOpen(); 
    	afx_msg void OnFileTraitement(); 
    	//}}  
    	DECLARE_MESSAGE_MAP()
    };
    // le fichier cpp
    / CMyPROGDoc construction/destruction
    /*! \fn CMyPROGDoc::CMyPROGDoc()
     *      \brief Constructeur par défaut
    */
    CMyPROGDoc::CMyPROGDoc()
    {
    	// TODO: add one-time construction code here
    	m_pThreadDispatcher=0;
    	m_pThreadMobus=0;
    	m_pThreadWago1=0;
    	m_pThreadWago2=0;
    	// m_pThreadHardware=0;  ///TEST
    	m_pThreadHardware1=0;
    	m_pThreadHardware2=0;
    }
    int CMyPROGDoc::Process(unsigned int uiProcess)
    {	
    	try
    	{
    		CString cstrFichier=m_Init.Get_Params_SYSTEM_File();
    		if(cstrFichier.Compare ("")==0)
    			return 1;
    		switch (uiProcess)
    		{
    			case PROCESS_SYSTEM_ACQUISITION:
    m_Init.Set_Params_General_ModeProcess(PROCESS_SYSTEM_ACQUISITION);	
    				m_pThreadWago1= new CThreadWago(0);
    				TRACE("Début tache Wago1\n");//4
    				m_pThreadWago1->CreateThread(NULL,0);  	
    				if(m_Init.Get_Params_Sas_Config_Securiy()& LEVEL_BI)
    				{
    					m_pThreadWago2= new CThreadWago(1);
    					TRACE("Début tache Wago2\n");//4
    					m_pThreadWago2->CreateThread(NULL,0);  
    				}
     
    				if(m_pThreadDispatcher)
    				{	
    					m_pThreadDispatcher->Thread_Stop();
    					delete m_pThreadDispatcher;
     
    TRACE("fin tache Dispatcher case SYSTEMacquisition \n");//4
    					m_pThreadDispatcher=0;
    				}
     
    				m_pThreadDispatcher= new CThreadDispatcher
    				(	m_Init.Get_Params_SYSTEM_File(),
    					this,
    					m_pThreadWago1,
    					m_pThreadWago2,
    					THREAD_ACQUISITION
    				);
    				TRACE("Début tache Dispatcher case SYSTEMacquisition\n");//4
     
    				m_pThreadDispatcher->CreateThread(NULL,0); 
     
    				break;
    			case PROCESS_SYSTEM_TRAITEMENT:
    				m_Init.Set_Params_General_ModeProcess(PROCESS_SYSTEM_TRAITEMENT);	
     
    				m_pThreadWago1= new CThreadWago(0);
    				TRACE("Début tache Wago1\n");//4
    				m_pThreadWago1->CreateThread(NULL,0);  
    			        ..............................
                                    ...............................
    			case PROCESS_SYSTEM_ALL :
    				m_Init.Set_Params_General_ModeProcess(PROCESS_SYSTEM_ALL);	
    				m_pThreadWago1= new CThreadWago(0);
                                    ...............................
                                    ...............................
     
                            case PROCESS_SYSTEM_AUTOMATIQUE:
    			       m_Init.Set_Params_General_ModeProcess(PROCESS_SYSTEM_AUTOMATIQUE);	
     
    				m_pThreadWago1= new CThreadWago(0);
    				TRACE("Début tache Wago1\n");//4
    				m_pThreadWago1->CreateThread(NULL,0);  
     
    				if(m_Init.Get_Params_Sas_Config_Securiy()& LEVEL_BI)
    				{
    					m_pThreadWago2= new CThreadWago(1);
    					TRACE("Début tache Wago2\n");//4
    					m_pThreadWago2->CreateThread(NULL,0);  
     
    				}
     
    				if(m_pThreadDispatcher)
    				{	
    					m_pThreadDispatcher->Thread_Stop();
    					delete m_pThreadDispatcher;
    					TRACE("fin tache Dispatcher case SYSTEMautom\n");//4
    					m_pThreadDispatcher=0;
    				}
     
    				if(m_Init.Get_Params_Sas_Config_Securiy() & LEVEL_SNG)
    					if(m_Init.Get_Params_Sas_Config_Securiy() & LEVEL_4)
    					{		
    					//////    
    						m_pThreadHardware1= new CThreadHardware(0);     //TEST
    						TRACE("Début tache BestCam principale1\n"); //TEST
    						m_pThreadHardware1->CreateThread(NULL,0);       //TEST
    					//////                                                  
    					}					
    					if(m_Init.Get_Params_Sas_Config_Securiy() & LEVEL_BI)   //TEST
                     		  {
    					   	m_pThreadHardware2= new CThreadHardware(1);     //TEST
    						TRACE("Début tache BestCam principale1\n"); //TEST
    			m_pThreadHardware2->CreateThread(NULL,0);       //TEST
    					}
    				/////// 
    				if(m_pThreadHardware1)				//TEST
    					m_pThreadHardware1->Autorisation(true);    //
    					if(m_pThreadHardware2)     //TEST
    					m_pThreadHardware2->Autorisation(true);    //
    				m_pThreadDispatcher= new CThreadDispatcher
    				(	m_Init.Get_Params_SYSTEM_File(),
    					this,
    					m_pThreadWago1,
    					m_pThreadWago2,
    					m_pThreadHardware1,                       //
    					m_pThreadHardware2,                       //  
    					THREAD_ACQUISITION | THREAD_TRAITEMENT 
    					| THREAD_AUTOMATIQUE
    				);
    				TRACE("Début tache Dispatcher case SYSTEMautom\n");//4				
    				m_pThreadDispatcher->CreateThread(NULL,0);
    Voici ce qui est de la classe CInit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
     
     
    // le fichier header
     
    class CInit : public CObject  
    {
    public:
    	CInit();
    	virtual ~CInit();
     
    	float Get_Params_SYSTEM_Sensor(int iCapteur); 
    	.....
     
    	CString Get_Params_SYSTEM_Directory(); 
    	sSerial Get_Params_SYSTEM_Serial1(void); 
    	sSerial Get_Params_SYSTEM_Serial2(void); 
    	unsigned int Get_Params_SYSTEM_Profileur(void);
     
    	.........
     
    	CString Get_Params_Hardware_Config_DirectroryAs();
    	CString Get_Params_Hardware_Config_DirectroryFs();
    	CString Get_Params_Hardware_Config_FileInit();
    	/////
    		CString Get_Params_Hardware_Config_FileInit_CamA();  //test
     
    		CString Get_Params_Hardware_Config_FileInit_CamB();  //test
            //////
     
    	unsigned int Get_Params_Hardware_Config_Distance1();
     
            ....................
     
     
    	int Set_Params_Hardware_Config(CString cstrDirectoryAs,CString cstrDirectoryFs,
    								CString cstrFileInit,CString cstrFileInitA,CString cstrFileInitB); ////test
    	int Set_Params_Hardware_Config_Distance(unsigned int uiDistance1, unsigned int uiDistance2);
    	int Set_Params_Hardware_Maximum(sMaximum MyMaximum); 
    	int Set_Params_Hardware_Traitement(int iFiltreHorizontal, int iFiltreLissage, int iFiltreVertical,int iValeurPivot); 
    	int Set_Params_Hardware_Config_Dllversion(char* chdllver);
    	int Set_Params_Hardware_Config_DirectoryAs(CString cstrDirectoryAs);
    	int Set_Params_Hardware_Config_DirectoryFs(CString cstrDirectoryFs);
    	int Set_Params_Hardware_Config_Init(CString cstrFileInit);
    	/////
    	 int Set_Params_Hardware_Config_Init_CamA(CString cstrFileInit); //test
    	 int Set_Params_Hardware_Config_Init_CamB(CString cstrFileInit); //test
    	/////
     
    private:
    	int		Set_Params_General
    				(unsigned int uiProcess,unsigned int uiUser,
    				 CString strPassWord,CString	strVersion,
    				 CString strBackup); 
     
    	int		Set_Default_General();
    	int		Set_Default_Logic();
    	int 	Set_Default_SYSTEM();
    	int 	Set_Default_Sas();
    	int		Set_Default_Wago();
    	int		Set_Default_Hardware();
     
     
    	bool	Is_First_Config(void);
     
    private:
    	CRegister				m_Register;			/*!< variable membre privée : La gestion des registres*/
     
    };
     
     
    // le fichier cpp
     
     
    // CInit  - >  Is_First_Config(void) 			
     
    /*! \fn bool CInit::Is_First_Config(void) 
     *      \brief Retourne si il faut remettre la configuration par défaut
     *      \return         TRUE    Si il faut mettre la configuration par défaut
     *      \return         FALSE   Si il ne faut pas mettre la configuration par défaut
    */
    bool CInit::Is_First_Config(void) 
    {
    	CRegister	MyRegister;
    	char ucBuffer[80];
     
    	// Check si new version.
    	if(MyRegister.Read_HKey_Local_Machine
    	(		INIT_GENERAL,"Version",ucBuffer,	sizeof(ucBuffer)))
    		return true;
     
    	if(strcmp(ucBuffer,INIT_DEFAUT_GENERAL_VERSION))
    		return true;
     
    	return false;
    }
    -----------------------------------------------------------------
    *! \fn int CInit::Set_Params_Hardware_Config(CString cstrDirectoryAs,CString cstrDirectoryFs,
    									CString cstrFileInit)
     *	\brief		Sauve La Configuration du stéreo
     *	\params		CString cstrDirectoryAs	: Le directory As
     *	\params		CString cstrDirectoryFs	: Le directory Fs
     *	\params		CString cstrFileInit	: La fichier init
     */
     
    ////test ajout A et B 
    int CInit::Set_Params_Hardware_Config(CString cstrDirectoryAs,CString cstrDirectoryFs,
    									CString cstrFileInit,CString cstrFileInitA,CString cstrFileInitB)
    {
    	m_Register.Write_HKey_Local_Machine 
    		(INIT_Hardware_CONFIG,"Directory As",cstrDirectoryAs);
    	m_Register.Write_HKey_Local_Machine 
    		(INIT_Hardware_CONFIG,"Directory Fs",cstrDirectoryFs);
    	m_Register.Write_HKey_Local_Machine 
    		(INIT_Hardware_CONFIG,"Init",cstrFileInit);
    	m_Register.Write_HKey_Local_Machine 
    		(INIT_Hardware_CONFIG,"InitA",cstrFileInitA);
    	m_Register.Write_HKey_Local_Machine 
    		(INIT_Hardware_CONFIG,"InitB",cstrFileInitB);
    	return(0);
    }
     
    ----------------------------------------------------------------------
     
     
    /*! \fn int CInit::Set_Params_Hardware_Config_Init(CString cstrFileInit)
     *      \brief          Sauve Le fichier init
     *      \params         CString cstrFileInit    : La fichier init
    */
    int CInit::Set_Params_Hardware_Config_Init(CString cstrFileInit)
    {
    	TRACE("SETPAR /n");
    	m_Register.Write_HKey_Local_Machine 
    		(INIT_Hardware_CONFIG,"Init",cstrFileInit);
    	return(0);
    }
    /////
    int CInit::Set_Params_Hardware_Config_Init_CamA(CString cstrFileInit) //test
     
    {
    	m_Register.Write_HKey_Local_Machine
    		(INIT_Hardware_CONFIG,"InitA",cstrFileInit);
     
    	return 0;
    }
     
    int CInit::Set_Params_Hardware_Config_Init_CamB(CString cstrFileInit) //test
     
    {
    	m_Register.Write_HKey_Local_Machine
    		(INIT_Hardware_CONFIG,"InitB",cstrFileInit);
     
    	return 0;
    }
     
    ------------------------------------------------------------------------
     
    /*! \fn CString CInit::Get_Params_Hardware_Config_FileInit()
     *      \brief          Retourne le fichier init
     *      \return         Le fichier init
    */
    CString CInit::Get_Params_Hardware_Config_FileInit()
    {
    	char ucBuffer[280];
    	CString	strFile;
    TRACE("GETPAR /n");
     
    	m_Register.Read_HKey_Local_Machine
    		(INIT_Hardware_CONFIG,"Init",ucBuffer,sizeof(ucBuffer));
     
    	strFile		=	ucBuffer;	
    	return(strFile);
    }
     
    /////
    CString CInit::Get_Params_Hardware_Config_FileInit_CamA()   //test
    {
    	char ucBuffer[280];
    	CString	strFile;
     
    	m_Register.Read_HKey_Local_Machine
    		(INIT_Hardware_CONFIG,"InitA",ucBuffer,sizeof(ucBuffer));
     
    	strFile		=	ucBuffer;	
    	return(strFile);
    }
     
     
    CString CInit::Get_Params_Hardware_Config_FileInit_CamB()   //test
    {
    	char ucBuffer[280];
    	CString	strFile;
     
    	m_Register.Read_HKey_Local_Machine
    		(INIT_Hardware_CONFIG,"InitB",ucBuffer,sizeof(ucBuffer));
     
    	strFile		=	ucBuffer;	
    	return(strFile);
    }
    Voici pour ThreadHardware

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
     
    // fichier header
     
    class CThreadHardware: public CThreadBackground  
    {
    public: //////
    	CThreadHardware(bool	bfront);    //test
    	//////
    	virtual ~CThreadHardware();
     
    	int		Autorisation		(bool bAutorisation);
    	int		DoorClose			(bool bDoor);
    	unsigned int		Get_Autorisation	(int iImage);
    	float	Get_Quality			(int iImage);
    	int		ProfileurActif		(char *pcData,int iNbData);
    private:	
    	void	Initialize			();
    	BOOL	InitInstance		();
    	int		ThreadExecute		();
     
    private:
    	bool	isAutorise			();
    	bool	isDoorClose			();
    	bool	isProfileurActif	();
     
    	int		Init_BestCam		();
    	int		Gestion_Camera		();
     
    	CMy99090Doc			*m_pDoc;	/*!< variable membre privée : Reférence sur le controlleur*/
     
    	bool			m_bAutorisation;	/*!< variable membre privée : Demande de prise de photo*/
    	bool			m_bDoorClose;		/*!< variable membre privée : Etat de la porte*/
    	bool			m_bProfileur;		/*!< variable membre privée : Etat du profileur*/
            ///////
    	bool			m_bProfileur2;			///test ajout du profileur 2 ici ?
            ///////
    	CInit			m_Init;		/*!< variable membre privée : Gestion des paramètres d'intialisation*/
    	CHardware*		m_pHardware;	/*!< variable membre privée : Gestion du Hardware*/
    	CTraitement1	*m_pTraitement1;	/*!< variable membre privée : Gestion sdu traitement*/
     
    	int				m_iAutorization1;	/*!< variable membre privée : Resultat du traitement de la première photo*/
    	int				m_iAutorization2;	/*!< variable membre privée : Resultat du traitement de la deuxième photo*/
    	int				m_iPhase;
     
    	float			m_fQuality1;		/*!< variable membre privée : Facteur de qualité Photo 1*/
    	float			m_fQuality2;		/*!< variable membre privée : Facteur de qualité Photo 2*/
     
    	sMaximum		m_Maximum;		/*!< variable membre privée : Params Maximum*/
    	unsigned int	m_uiSecurity;		/*!< variable membre privée : Niveau de sécurité*/
     
    	int			m_itictac;
    	//////
    	bool			m_bfront;           //test pour dire Hardware1 ou 2
    	//////
    };
     
    #endif 
     
     
    //fichier cpp
     
    CThreadHardware::CThreadHardware(bool bfront)   //test
    {
    	//////
    	m_bfront=bfront;                        //test
    	//////
    	m_iPhase=0;
    	m_bProfileur=false;
    	m_bProfileur2=false;				////test
    	m_bDoorClose=false;
    	m_bAutorisation=false;
    	m_pHardware=0;
    	m_pHardware = new CHardware(m_bfront);  ////testali ajout du booleen syntaxe?
    	TRACE("Début tache Hardwaremain\n");//4
    	m_pTraitement1=new CTraitement1(m_Init.Get_Params_Asdas_Save());
    	TRACE("Début tache Hardwaretraitemnt\n");//4
    	m_iAutorization1=0;
    	m_iAutorization2=0;
    	m_fQuality1=0;
    	m_fQuality2=0;
    }
     
    //////////////////////
     
    int CThreadHardware::Init_BestCam()
    {
    	if(m_pHardware->Init())
    	{
    		TRACE("Erreur Init_BestCam\n");	
    		Set_Status(STATUS_PROBLEME);
    		return 1;
    	}
    	return 0;
    }
    Et la classe CViewCfgHardware la plus importante en soi car c'est
    elle qui appelle directement la classe CInit et fait des lectures ecritures
    sur le registre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
     
     
    ----------------------------------------------------------------------------------
    ViewCfgHardware.CPP    -     void CViewCfgHardware::OnInitialUpdate() 
     
     
        ........................
    // Filtre Cellule
    	m_ctrlCellule.SetCurSel(MyMaximum.iNbZero);
     
    	m_iContact=MyMaximum.iPointContact;
     
    	for(i=1;i<11;i++)
    	{
    		strData.Format ("%d X",i);
    		m_ctrlReductionContinuite.AddString(strData);
    	}
    	m_ctrlReductionContinuite.SetCurSel(MyMaximum.iReductionContinuite-1);
     
    	/////
    	// m_strBestCamA=MyInit.Get_Params_Hardware_Config_FileInit_CamA(); ///\\\test + conve
    	// m_strBestCamB=MyInit.Get_Params_Hardware_Config_FileInit_CamB(); ///\\\test  + conve
    	/////
    	/////
    	m_iBestCamA=MyInit.Get_Params_Hardware_Config_FileInit_CamA(); ///\\\test + conversion ?
    	m_iBestCamB=MyInit.Get_Params_Hardware_Config_FileInit_CamB(); ///\\\test  + conversion ?
    	/////
        // m_iBestCamA= 502462;   ////test
    	// m_iBestCamA= 502467;
     
    	//distance
    	m_uiDistance1=MyInit.Get_Params_Hardware_Config_Distance1();
    	m_uiDistance2=MyInit.Get_Params_Hardware_Config_Distance2();
     
     
    	UpdateData(false);
     
    ----------------------------------------------------------------
     ViewCfgHardware.CPP      -      CViewCfgHardware()
     
     
    CViewCfgHardware::CViewCfgHardware()
    	: CFormView(CViewCfgHardware::IDD)
    {
    	//{{AFX_DATA_INIT(CViewCfgHardware)
    	m_iSurface = 0;
    	m_iCellule = 0;
    	m_iInfraRouge = 0;
    	m_iLargeur = 0;
    	m_iContact = 0;
    	m_uiDistance1 = 0;
    	m_uiDistance2 = 0;
    	/////
    	m_iBestCamA =0;  //test
    	m_iBestCamB =0;  //test
    	/////
    	//}}AFX_DATA_INIT
    }
     
     
    --------------------------------------------------------------
    ViewCfgHardware.CPP      void CViewCfgHardware::DoDataExchange(CDataExchange* pDX)
     
     
            .....
    	DDX_Text(pDX, IDC_ELARGEUR, m_iLargeur);
    	DDX_Text(pDX, IDC_ECONTACT, m_iContact);
    	DDX_Text(pDX, IDC_EDISTANCE1, m_uiDistance1);
    	DDX_Text(pDX, IDC_EDISTANCE2, m_uiDistance2);
    	/////
    	DDX_Text(pDX, IDC_EHardwareA, m_iBestCamA);  //test	
    	DDX_Text(pDX, IDC_EHardwareB, m_iBestCamB);  //test
    	/////
     
    	//}}AFX_DATA_MAP
    }
     
    --------------------------------------------------------------
     ViewCfgHardware.CPP        OnDestroy() 
     
    void CViewCfgHardware::OnDestroy() 
    {
    	CFormView::OnDestroy();
     
    	// TODO: Add your message handler code here
    		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 ();
     
    			...........
     
    			MyInit.Set_Params_Hardware_Maximum(MyMaximum);
    			MyInit.Set_Params_Hardware_Config_Distance(m_uiDistance1,m_uiDistance2);
     
    			 //  if (m_iBestCamA == True)                                   
           MyInit.Set_Params_Hardware_Config_Init_CamA(CString cstrFileInit+"BestCamHardware_"+m_IBestCamA+".ini"); 
    		        // else if (m_iBestCamB == True)                          
           MyInit.Set_Params_Hardware_Config_Init_CamB(CString cstrFileInit); /// Cstring ?
    			// else                                                     
     
     
    		}		
    	}
    }
     
     
    ---------------------------------------------------------------------
       ViewCfgHardware.CPP           IsModify() 
     
     
            ............
    	if(m_uiDistance1!=MyInit.Get_Params_Hardware_Config_Distance1()) return true;
    	if(m_uiDistance2!=MyInit.Get_Params_Hardware_Config_Distance2()) return true;
    	/////
    	// if(m_strBestCamA!=MyInit.Get_Params_Hardware_Config_FileInit_CamA())return true; //test
    	//	if(m_strBestCamB!=MyInit.Get_Params_Hardware_Config_FileInit_CamB())return true; //test
     
    	if(m_iBestCamA!=MyInit.Get_Params_Hardware_Config_FileInit_CamA())return true; ////test
    	if(m_iBestCamB!=MyInit.Get_Params_Hardware_Config_FileInit_CamB())return true; ////test
     
    	/////
    	return false;
    }
    Pour finir la classe Hardware la plus importante c'est qui va initialiser la bonne camera

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
     
    ---------------------------------------------------------------------------
    // Hardware.CPP       - >    CHardware(bool bver)
     
     
     CHardware::CHardware(bool bver)	
    {
            m_bver=bver;
    	m_pHardware=0;
    	m_pHardware = new BestCamHardware();
    	TRACE("Début tache Hardware\n");//4
    }
     
    ---------------------------------------------------------------------------
    Hardware.CPP       -     int CHardware::Init()
     
     
    int CHardware::Init()
    {
    	try
    	{
    		FSRetVal tmp;
     
    		CInit m_Init;
     
    		if(m_bver==0)	////test mettre appel du this ? 
    			string strFile((LPCTSTR)chemin+"BestCam"+m_Init.Get_Params_Hardware_Config_FileInit_CamA())+".ini"; 
    		else
    			string strFile((LPCTSTR)m_Init.Get_Params_Hardware_Config_FileInit_CamB()); ////testali
     
    			tmp = m_pHardware->SetConfigFilePath((char*)strFile.c_str());
     
    			if(tmp!= FS_SUCCESS)
    			{	
    			TRACE("SetConfigFilePath failed\n");
    			return 1;
    			}
     
    			tmp = m_pHardware->Initialize();
    			.........
    Si j'ai mis tous ce codes c'est car il s'agit de classes avec heritages et que pour dire si tel ou tel camera doit etre initialiser il faut aussi tenir compte d'autres facteurs notament l'etats des capteurs ( profileurs 1 ou 2).

    Merci.

  4. #4
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Rebonsoir,


    Est-ce que quelqu'un pourrait m'aider ?

    Je resume mon cas j'ai ces codes, est-ce qu'ils sont juste syntaxiquement
    car je ne connais pas trop les differentes fonctions et
    J'ai fais quelques concatenations de chaines que dois je faire encore?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    //  CHardware   - >      Init()
     
    if(m_bver==0)	////test
                          string strFile((LPCTSTR)chemin+"BestCam"+m_Init.Get_Params_Hardware_Config_FileInit_CamA()+".ini"; 
    		else
    			string strFile((LPCTSTR)chemin+"BestCam"+m_Init.Get_Params_Hardware_Config_FileInit_CamB()+".ini";////test
    		tmp = m_pHardware->SetConfigFilePath((char*)strFile.c_str());
    			if(tmp!= FS_SUCCESS)
    			{	
    			TRACE("SetConfigFilePath failed\n");
    			return 1;
    			}
    			tmp = m_pHardware->Initialize();
    Le code ci dessus permet d'initialiser le Hardware avec le bon fichier ini au bon chemin.

    le chemin sera sans doute une expression par exemple comme ceci
    "C:\dossier\Includes\" entre guillemets.
    L'instruction : m_Init.Get_Params_Hardware_Config_FileInit_CamX()
    permet de recuperer le numero de serie de la camera dans le registre cette valeur se trouve egalement dans la zone Edit Control m_iBestCamA et B (pour les deux cameras).


    Cette autre partie de code permettra d'ecrire dans le registre le chemin du fichier ini ayant les nouveaux numeros des zones m_iBestCamA et B

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    //ViewCfgHardware.CPP        OnDestroy() 
     
    void CViewCfgHardware::OnDestroy() 
    {
    	CFormView::OnDestroy();
     
    	// TODO: Add your message handler code here
    		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);
     
    			 //  if (m_iBestCamA == True)                                   
           MyInit.Set_Params_Hardware_Config_Init_CamA(CString cstrFileInit+"chemin"+"BestCamHardware_"+m_IBestCamA+".ini"); 
    		        // if (m_iBestCamB == True)                          
           MyInit.Set_Params_Hardware_Config_Init_CamB(CString cstrFileInit+"chemin"+"BestCamHardware_"+m_IBestCamB+".ini"); ); /// Cstring ?
    			// else                                                     
    		}		
    	}
    }
    Mais il y aurait sans doute un probleme car les fonctions attendent comme parametres un string, alors que ma variable membre est un entier (m_IBestCamB ) voici toutefois la definition de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int CInit::Set_Params_Stereo_Config_Init_CamA(CString cstrFileInit)
    {
    	m_Register.Write_HKey_Local_Machine 
    		(INIT_STEREO_CONFIG,"InitA",cstrFileInit);
    	return(0);
    }

    Comment puis je formater dans ce cas la valeur entiere de mes zones afin de les passer dans cette fonction ?

    Merci de m'aider.

Discussions similaires

  1. Réponses: 7
    Dernier message: 19/11/2014, 08h46
  2. Réponses: 1
    Dernier message: 08/09/2007, 17h12
  3. Probleme Insert entiers - chaine de caracteres
    Par keub51 dans le forum Requêtes
    Réponses: 2
    Dernier message: 22/02/2007, 19h13
  4. conversion datetime-chaine de caracteres
    Par HULK dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/08/2005, 13h26
  5. Controler une chaine de caracteres ou d'entiers?
    Par Le druide dans le forum C
    Réponses: 6
    Dernier message: 25/09/2003, 08h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo