Converion d'un type specifique vers un entier lors du retour d'une fonction

develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009 - 12 oct. 2006 à 03:36
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009 - 13 oct. 2006 à 13:16
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 le code de la fonction dans laquelle on doit faire cette
conversion, alors je dois faire ca juste avant de sortir de cette
fonction, avant d'envoyer vers le type de cette meme fonction qui est
un entier.


Remarque: avant j'envoyais simplement un numero en fonctions des erreurs.

<!-- BEGIN TEMPLATE: bbcode_code -->
Code :
int CHardware::Init() //initialisations avec les differents erreurs possible
{
try
{
FSRetVal tmp; // le type specifique qu'il faut convertir
string strFile;
CInit m_Init;

if(m_bver= =0) // le boleen qui dit laquelle des 2 cameras c'est.
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) // FS_SUCCESS chaine que nous envoit la dll
{ // il peut nous envoyer d'autres chaine genre
if(m_bver==0) // FS_CANNOT_CONNECT_TO_CAMERA et l'ensemble
//de ces chaines je les #define par des numeros pour chacuns
{
TRACE("SetConfigFilePath Hardware 1 failed : ");
TRACE("%s\n", FSRetval_Names[tmp]);
return tmp; // avant de faire ce return je dois CONVERTIR
}
else
{
TRACE("SetConfigFilePath Hardware 2 failed : ");
TRACE("%s\n", FSRetval_Names[tmp]);
return tmp;
}
}

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 :");
TRACE("%s\n",FSRetVal_Names[tmp]);
return tmp;
}
else
{
TRACE("Initialize Hardware 2 NOK :");
TRACE("%s\n",FSRetVal_Names[tmp]);
return tmp;
}
}
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 1;
}
}


Voici donc la fonction Init() de la classe CHardware. Comment et ou je
dois creer la fonction de conversion d'un type vers un autre (le
prototype et le corps de la fonction) et comment vais-je l'appeler?


Merci

5 réponses

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
12 oct. 2006 à 09:11
Pourquoi ne pas changer ton prototype de Init() pour retourner un FSRetVal plutôt qu'un int?

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
12 oct. 2006 à 12:19
Car la fonction Init() est appellée aussi par une autre fonction et car on a plusieurs threads qui tournent ensemble.

et donc j'ai fait une nouvelle conversion qui me genere encore des erreurs.



////
string strrecupinit;

if(m_bver==0)


{      TRACE("SetConfigFilePath Hardware 1 failed : ");
         TRACE("%s\n",FSRetVal_Names[tmp]);
         strrecupinit = (LPCTSTR)tmp;
          int conv= atoi(tmp.c_str());
          return (conv);




/////
                
             J'ai comme   erreur 'la parti gauche de c_str doit avoir un class/struct/union'


Merci
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 oct. 2006 à 12:22
louche, ton

int conv= atoi(tmp.c_str());

c'est quoi au fait, un FSRetVal ?

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009
12 oct. 2006 à 13:40
 FSRetVal est un typedef enum :

///////
static const char* FSRetVal_Names[FS_ERROR_NUMBER] = { "FS_SUCCESS",


"FS_ERROR_LOW_MEMORY",


"FS_ERROR_BAD_PARAMETER",


"FS_ERROR_BAD_PARAMETER_IN_CONFIG_FILE",


"FS_ERROR_BAD_CONFIG_FORMAT",


"FS_ERROR_CANNOT_OPEN_FILE",


"FS_ERROR_CANNOT_CREATE_PROCESS",


"FS_ERROR_COMMUNICATION_LOST",


"FS_ERROR_DISK_FULL",


"FS_ERROR_CANNOT_EXECUTE",


"FS_ERROR_UNKNOWN",


"FS_ERROR_CAMERA_NOT_FOUND"};


/////

Tou compte fait Buno, je pense que je vais opter pour ta solution mais pourrais tu m'aider a changer 
le  prototype de Init() pour retourner un FSRetVal plutôt qu'un int

Comment serait son prototype et sa definition
et pour l'appeler comment faire sachant que j'ai ça comme appel la dessus:

////


/*! \fn int CThreadStereo::Init_FastCom()


* \brief Init Stereo


* \return 0 OK


* \return 1 KO


*/



int



CThreadStereo::Init_FastCom(){

m_initstereostatus=m_pStereo->Init();


if
(m_initstereostatus){

TRACE(


"Erreur Init_FastCom\n"
); Set_Status(STATUS_PROBLEME);


return
1;}


return
0;}
////////





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
13 oct. 2006 à 13:16
Bonjour,

Voila apres un moment je reviens cette fois avec un code plus propre pour passer mes valeurs.
J'ai dans un premier temps j'ai changé le retour de Init() en FSRteVal .
Apres cela j'ai pu avoir mes affichages d'erreurs, c'était parfait mais je n'arrivais pas a dire
de quel camera il venait et donc dans un deuxième temps j'ai utilisé un struct pour renvoyer à la fois l'erreur (FSRteVal) et la camera correspondant (bool) .

Mais avec struct j'ai quelques erreurs, voici men code:

///////////////////////////////////////
typedef
struct sNoprob
{

bool bster;
FSRetVal FStmpint;

int inut;
}sNoprob;
//////////////////////////////////////

et sa definition dans le header :

/////////////////////////////////////////
....

float GetQuality(
int iImage);
sNoprob isProblemeStereo();

bool isProblemeTraitement();

bool isProblemeAcquisition();

....
//////////////////////////////////

Le retour de ma fonction IsProblem() a changé egalement:

////////////////////////////////////

sNoprob CMy99090Doc::isProblemeStereo()   
{
  
    sNoprob inter;
 inter.FStmpint = FS_SUCCESS;           
 
 if(m_pThreadStereo1->m_initstereostatus==FS_SUCCESS && m_pThreadStereo2->m_initstereostatus==FS_SUCCESS)  
  return inter;            
    if (m_pThreadStereo1->m_initstereostatus!=FS_SUCCESS || m_pThreadStereo2->m_initstereostatus!=FS_SUCCESS)
       
  if (m_pThreadStereo1)
        { if (m_pThreadStereo1->isProbleme())
             inter.bster = 0;
             inter.FStmpint = m_pThreadStereo1->m_initstereostatus ;
        }
  else if (m_pThreadStereo2) 
       { if (m_pThreadStereo2->isProbleme())
             inter.bster = 1;
              inter.FStmpint = m_pThreadStereo2->m_initstereostatus ;
        }
       
    return inter;
}

////////////////////////////////

Voici  ma ffonction OntImer pour l'affichage: 

/////
.........

  if(m_Init.Get_Params_General_ModeProcess ()==PROCESS_SAS_AUTOMATIQUE)
  {
     if(uiSecurity& LEVEL_1)
   {  
    //CStereo m_bvercam;               
    sNoprob initstereostatus=pDoc->isProblemeStereo();  
     if(initstereostatus.FStmpint)    
      m_ListeStereo.ResetContent ();  
     else
      m_bPblStereo=false;
    if (initstereostatus.bster)
                 {switch(initstereostatus.FStmpint) 
      {

                  case FS_ERROR_LOW_MEMORY:  
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
          m_ListeStereo.AddString (strDatalist);
        break;

      case FS_ERROR_CANNOT_OPEN_FILE:  
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
        break;
   
                  case FS_ERROR_BAD_CONFIG_FORMAT:  

                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
break;

      case FS_ERROR_BAD_PARAMETER_IN_CONFIG_FILE:  
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_BAD_PARAMETER:  
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_CANNOT_CREATE_PROCESS:  
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_COMMUNICATION_LOST:  
                         
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
               break;

                  case FS_ERROR_DISK_FULL:  
                                m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
           break;

                  case FS_ERROR_CANNOT_EXECUTE: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_UNKNOWN:  
                        
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
           break;

                  case FS_ERROR_CAMERA_NOT_FOUND:  
                 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_NUMBER:  
            
          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 1  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;
           
      }
     }
      else
        {  
     switch(initstereostatus.FStmpint)

      {
                  case FS_ERROR_LOW_MEMORY: 

           m_bPblStereo=true;
        strDatalist.Format ("Explication Stereo 2 %s", FSRetVal_Names[initstereostatus.FStmpint]);
        m_ListeStereo.AddString (strDatalist);
        break;

      case FS_ERROR_CANNOT_OPEN_FILE: 
                
                          m_bPblStereo=true;
        strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
        m_ListeStereo.AddString (strDatalist);
        break;
   
                  case FS_ERROR_BAD_CONFIG_FORMAT: 
            m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

      case FS_ERROR_BAD_PARAMETER_IN_CONFIG_FILE: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_BAD_PARAMETER: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_CANNOT_CREATE_PROCESS: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_COMMUNICATION_LOST: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_DISK_FULL: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_CANNOT_EXECUTE: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_UNKNOWN: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_CAMERA_NOT_FOUND: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;

                  case FS_ERROR_NUMBER: 
                          m_bPblStereo=true;
         strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);
         m_ListeStereo.AddString (strDatalist);
         break;
           
      }
      }
     if(pDoc->isIniteStereo())
     m_bStereo=true;
        else
     m_bStereo=false;
   }
   else
   {
    m_bPblStereo=false;
    m_bStereo=true;
   }

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

   if(pDoc->isInitModbus())
    m_bModbus=true;
   else
    m_bModbus=false;
  } 
  UpdateData(false);

.........
}
///////////////////////////////////////////

Je pensais que l'erreur venait de %s dans l'instruction : strDatalist.Format ("Explication Stereo 2  %s", FSRetVal_Names[initstereostatus.FStmpint]);

mais  en remplaçant ca par ceci rien n'a changé   :  strDatalist.Format ( Explication Stereo 2  :  FS_ERROR_CAMERA_NOT_FOUND);

D'ou peut venir les erreurs ?

Merci
0
Rejoignez-nous