Passage de parametres avec concatenation a une fonction qui attend string

develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009 - 3 oct. 2006 à 05:06
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009 - 10 oct. 2006 à 17:00
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 :
<!--[endif]-->

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() )

<!--[endif]-->

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;

<!--[if !supportEmptyParas]--> <!--[endif]-->

                        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 )
<!-- BEGIN TEMPLATE: bbcode_code -->

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");
........
.........

<!-- END TEMPLATE: bbcode_code -->

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

Merci de votre aide

<!--[if !supportEmptyParas]--> 

10 réponses

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
3 oct. 2006 à 16:49
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
0
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009
4 oct. 2006 à 09:55
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
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
4 oct. 2006 à 10:31
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
0
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009
5 oct. 2006 à 16:41
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009
5 oct. 2006 à 16:53
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 :)
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
5 oct. 2006 à 16:58
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
0
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009
6 oct. 2006 à 00:41
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 :)
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
6 oct. 2006 à 09:27
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
0
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009
9 oct. 2006 à 09:10
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
0
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009
10 oct. 2006 à 17:00
Bonjour,

Je voudrais afficher dans une List Box, les problèmes rencontrés lors de l'initialisations
des caméras (Hardwares) ( il y en a deux maximum).



-Je vous explique generalement le prorgamme:


Mon programmme travaille en Multithreads. Tout d'abord, j'ai quelques petits soucis car
l'affichage des erreurs tarde à venir mais ça je pense que c'est du au fait que j'utilise une fonction
'Ontimer(UINT nIDEvent)' durant la phase d'affichage des erreurs à l'initialisations. Mais bon ce problème je le traiterai
après.
Maintenant au niveau de l'affichage, il est question de 2 caméras et il faut
les initialiser et afficher leurs erreurs d'init ( mauvais fichier chargé pour les caméras ou caméra débranchées)
Au depart je n'avais qu'une seule caméra et l'affichage se fesait très bien,
actuellement j'en utilise deux et donc je suis amener à changer les fonctions.


J'ai une classe 'CViewSYSInitialisation' dont la fonction 'Ontimer(UINT nIDEvent)'
fait appel à une autre fonction d'une autre classe générale CMy99090DOC' cette derinere
fonction renvoit les instanciations des 2 caméras (m_pThreadHardware1 et m_pThreadHardware2)
qu'elle aura recuperer de la classe Hardware cette dernière classe
 enregistrera, avec sa fonction 'Init()', l'initialisation des caméras et enregistrera donc des erreurs d'init des
chaques instances des caméras dans leurs variables 'm_initHardwarestatus'.



-Après ces explications, mes questions:


En effet j'ai dans ma fonction 'isProblemHardware()' qui est apellée par cette
variable ''initHardwarestatus' de la fonction 'Ontimer(UINT nIDEvent)'
un retour d'un entier. Ce entier retourné est évaluée dans la fonction appellante par un switch
puis en fonction des différents case: je fais un Addstring sur ma liste box.


La fonction tel que je l'ai fait marche mais n'est pas très professionnelle
car elle renvoit les erreurs d'init que d'une des cameras ( celle qui se serait initialisée la
première) comment puis-je savoir lors de l'appel de cette fonction quelle instanciation donner
à la fonction appellante?

-Codes:

On peut dire que les codes se divisent en 2 parties : - INITIALISATIONS HARDWARES
                                                                              - AFFICHAGES DES PROBLEMES D'INIT HARDWARE
Les principales instances et variables   :                    - m_initHardwarestatus
                                                                               - m_pThreadHardware1 
                                                                               - m_pThreadHardware2

-----------------------------------------------
-----------------------------------------------
     INITIALISATIONS HARDWARE
-----------------------------------------------

int CMy99090Doc::Process(unsigned int uiProcess)

 try
 {
  CString cstrFichier=m_Init.Get_Params_ACDAS_File();
  if(cstrFichier.Compare ("")==0)
   return 1;



  switch (uiProcess)
  {
   
case PROCESS_DIVERS_ACQUISITION:  // autre process
 
     ......... (codes inutiles)



case PROCESS_SYS_AUTOMATIQUE:    // notre process



       if(m_Init.Get_Params_SYS_Config_Securiy() & LEVEL_4)   // securité et niveau dans lequel on travaille    
    { 
     m_pThreadHardware1= new CThreadHardware(0);    // Thread initalisation de la caméra 1
     TRACE("Début tache BestCam principale1\n");
     m_pThreadHardware1->CreateThread(NULL,0);      
    
       if(m_Init.Get_Params_SYS_Config_Securiy() & LEVEL_BI)  



                                      {
        Sleep(10000);
      m_pThreadHardware2= new CThreadHardware(1);    
     TRACE("Début tache BestCam principale2\n");
     m_pThreadHardware2->CreateThread(NULL,0);     
     }
    }



    if(m_pThreadDispatcher)   // Thread qui dispatche les autres Threads
    { 
     m_pThreadDispatcher->Thread_Stop();
     delete m_pThreadDispatcher;
     TRACE("fin tache Dispatcher case ACDASSYSautom\n");//4
     m_pThreadDispatcher=0;
    }



                             m_pThreadDispatcher= new CThreadDispatcher 
    ( m_Init.Get_Params_ACDAS_File(),
     this,
     m_pThreadWago1,        // pour la comminication avec differents peripheriques    
     m_pThreadWago2,
     m_pThreadHardware1,    // camera 1
     m_pThreadHardware2,    //  camera 2
     THREAD_ACQUISITION | THREAD_TRAITEMENT
     | THREAD_AUTOMATIQUE
    );
    TRACE("Début tache Dispatcher case ACDASSYSautom\n");//4    
    m_pThreadDispatcher->CreateThread(NULL,0);




 



int CThreadHardware::Init_BestCam()
{
 m_initHardwarestatus=m_pHardware->Init();
 if(m_initHardwarestatus)
 {
  
  TRACE("Erreur Init_BestCam\n"); 
               Set_Status(STATUS_PROBLEME);
  return 1;
 }
 return 0;
}



------------------




 



int CHardware::Init()    ///////inittialisations avec les differents erreurs possible
{
 try
 {
  FSRetVal tmp;
  string strFile;
  CInit m_Init;
  
  if(m_bver==0) ////testali mettre appel du this ?
   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"));



   tmp = m_pHardware->SetConfigFilePath((char*)strFile.c_str()); 
                      
   if(tmp!= FS_SUCCESS)
   { 
    if(m_bver==0)
    {
     TRACE("SetConfigFilePath Hardware 1 failed\n");
     return 1;
    }
    else
    {
     TRACE("SetConfigFilePath Hardware 2 failed\n");
     return 2;
    }
   }
    
   TRACE("Init cam :%d  - config :%s\n",m_bver,(char*)strFile.c_str());
   tmp = m_pHardware->Initialize();



   if(tmp!= FS_SUCCESS)
   { 
    m_pHardware->FreeMem();
    if(m_bver==0)
    {
    TRACE("Initialize Hardware 1 NOK\n");
    TRACE("Explication Hardware 1 %s\n",FSRetVal_Names[tmp]);
    return 3;
    }
    else
    {
    TRACE("Initialize Hardware 2 NOK\n");
    TRACE("Explication Hardware 2 %s\n",FSRetVal_Names[tmp]);
    return 4; 
    }



   }



   char* p_cdllver;
   p_cdllver=m_pHardware->GetDLLVersion();
  m_Init.Set_Params_Hardware_Config_Dllversion(p_cdllver);
   TRACE("Init Hardware OK pour cam : %d\n",m_bver); 
  return 0;
 }
 catch(...)
 {
  TRACE("Init NOK\n");
  return 5;
 }
}

-----------------------------------------------
-----------------------------------------------
     AFFICHAGES DES PROBLEMES D'INIT HARDWARE
-----------------------------------------------
-----------------------------------------------


void CViewSYSInitialisation::OnTimer(UINT nIDEvent)
{
 // TODO: Add your message handler code here and/or call default
 unsigned int uiSecurity;
      CString strDatalist;            // pour afficher dans la list box                     
 uiSecurity=m_Init.Get_Params_SYS_Config_Securiy();


 // Vérifie le mode de fonctionnement
 if(nIDEvent==ID_CLOCK_SYS)
 {
  KillTimer(ID_CLOCK_SYS);
  CMy99090Doc *pDoc= (CMy99090Doc *) GetDocument();   


  UpdateData(true);


  if(uiSecurity& LEVEL_1)
  {
   if(pDoc->isProblemeAcquisition())
    m_bPblAcquisition=true;
   else
    m_bPblAcquisition=false;


   if(pDoc->isInitAcquisition())
    m_bAcquisition=true;
   else
    m_bAcquisition=false;


   if(pDoc->isProblemeTraitement())
    m_bPblTraitement=true;
   else
    m_bPblTraitement=false;


   if(pDoc->isInitTraitement())
    m_bTraitement =true;
   else
    m_bTraitement=false;


   if(pDoc->isProblemeWago())
    m_bPblWago=true;
   else
    m_bPblWago=false;


   if(pDoc->isInitWago())
    m_bWago=true;
   else
    m_bWago=false;
  }
  else
  {
   m_bPblAcquisition=false;
   m_bAcquisition=true;
   m_bPblTraitement=false;
   m_bTraitement =true;
   m_bPblWago=false;
   m_bWago=true;
  }


  if(pDoc->isProblemeTache())
   m_bPblTache=true;
  else
   m_bPblTache=false;


  if(pDoc->isInitTache())
   m_bTache=true;
  else
   m_bTache=false;


  if(m_Init.Get_Params_General_ModeProcess ()==PROCESS_SYS_AUTOMATIQUE)
  {
     if(uiSecurity& LEVEL_1)
   {
    int initHardwarestatus=pDoc->isProblemeHardware();
     if(initHardwarestatus)    
      m_ListeHardware.ResetContent ();  
     else
      m_bPblHardware=false;
                  switch(initHardwarestatus)
      {
                  case 1: 
                          m_bPblHardware=true;
        strDatalist.Format ("SetConfigFilePath Hardware 1 failed \n");
        m_ListeHardware.AddString (strDatalist);   
        break;
    case 2: 
                          m_bPblHardware=true;
        strDatalist.Format ("SetConfigFilePath Hardware 2 failed %d");
        m_ListeHardware.AddString (strDatalist);
        break;
                  case 3: 
                          m_bPblHardware=true;
        strDatalist.Format ("Initialize Hardware 1 NOK");
        m_ListeHardware.AddString (strDatalist);
       strDatalist.Format ("Explication Hardware 1  %d", FSRetVal_Names[tmp]);
        m_ListeHardware.AddString (strDatalist);
        break;


    case 4: 
                          m_bPblHardware=true;
        strDatalist.Format ("Initialize Hardware 2 NOK");
        m_ListeHardware.AddString (strDatalist);
        strDatalist.Format ("Explication Hardware 2  %d", FSRetVal_Names[tmp]);
        m_ListeHardware.AddString (strDatalist);
        break; 
                  }// switch()
    
   
     if(pDoc->isIniteHardware())
     m_bHardware=true;
        else
     m_bHardware=false;
   }
   else
   {
    m_bPblHardware=false;
    m_bHardware=true;
   }


   if(pDoc->isProblemeModbus())
    m_bPblModbus=true;
   else
    m_bPblModbus=false;




   if(pDoc->isInitModbus())
    m_bModbus=true;
   else
    m_bModbus=false;
  }
  
  UpdateData(false);
  SetTimer(ID_CLOCK_SYS,500,NULL);
 }
 else if(nIDEvent==ID_CLOCK_PULSE)
 {
  KillTimer(ID_CLOCK_PULSE);
  UpdateData(true);
  if( m_bModbus
   && m_bAcquisition
   && m_bModbus
   && m_bTache
   && m_bHardware
   && m_bWago
   && m_bTraitement
    )
  { 
   CMy99090Doc *pDoc= (CMy99090Doc *) GetDocument();   
   pDoc->OpenSYSVisualisation();
  }
  else   
  { 
   m_ctrlProgression.SetPos(m_iProgress);
   
   m_iProgress+=1;
   
   if(m_iProgress==100)
    m_iProgress=0;


   SetTimer(ID_CLOCK_PULSE,100,NULL);
  }
 }


 CFormView::OnTimer(nIDEvent);
}


-------------------------------------------------
int CMy99090Doc::isProblemeHardware()             /////a savoir kel camera deconne
{
 
/*                                                         code depart
 int ireturn=0;
 m_pThreadHardware2->m_initHardwarestatus;
 if(m_pThreadHardware1==0 && m_pThreadHardware2==0 ) 
  return 0;
    if(m_pThreadHardware1==0 || m_pThreadHardware2==0 )
     if (m_pThreadHardware1==0)
  {if (m_pThreadHardware2->isProbleme())
    ireturn =m_pThreadHardware2->m_initHardwarestatus;
  }
  else 
   if (m_pThreadHardware1->isProbleme())
    ireturn =m_pThreadHardware1->m_initHardwarestatus;



 return ireturn;
   */
                                                                                     // m_initHardwarestatus pour avoir le numero de l'erreur, deja defini grace a int CHardware::Init()
     int ireturn=0;
 if(m_pThreadHardware1->m_initHardwarestatus==0 && m_pThreadHardware2->m_initHardwarestatus==0) 
  return 0;
    if (m_pThreadHardware1->m_initHardwarestatus!=0 || m_pThreadHardware2->m_initHardwarestatus!=0)
      
  //if (m_pThreadHardware1->m_initHardwarestatus!=0)
        //if(m_bfront==0)
  //if(CHardware::m_pHardware->m_bver==0)    // ici j'ai des erreurs m_bver non connu alors que je met la classe devant ?
    if (m_pThreadHardware1->isProbleme())
     ireturn= m_pThreadHardware1->m_initHardwarestatus ;
    if (m_pThreadHardware2->isProbleme())
     ireturn= m_pThreadHardware2->m_initHardwarestatus ;



    // if(m_bfront==0)
    //   m_pThreadHardware1->m_initHardwarestatus;
    //  else
    //    m_pThreadHardware2->m_initHardwarestatus;
      
    return ireturn;
 
}




Comme vous pouvez le voir je ne peu initialiser en même temps les deux Hardware ensemble car la fonction isProblemeHardware() 
ne renvoit qu'un seul entier.

Pourrais-je eventuellement passer un argument à la fonction et si oui quel type d'argument et comment ?
pourrais-je utiliser un this et comment?




Merci de m'aider
0
Rejoignez-nous