begin process at 2012 05 28 22:50:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

MFC

 > 

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


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

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

jeudi 12 octobre 2006 à 03:36:09 | converion d'un type specifique vers un entier lors du retour d'une fonction

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 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.

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
jeudi 12 octobre 2006 à 09:11:46 | Re : converion d'un type specifique vers un entier lors du retour d'une fonction

buno

Administrateur CodeS-SourceS
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
jeudi 12 octobre 2006 à 12:19:01 | Re : converion d'un type specifique vers un entier lors du retour d'une fonction

develdelphi


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


jeudi 12 octobre 2006 à 12:22:41 | Re : converion d'un type specifique vers un entier lors du retour d'une fonction

Renfield

Administrateur CodeS-SourceS
louche, ton

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

c'est quoi au fait, un FSRetVal ?

Renfield
Admin CodeS-SourceS- MVP Visual Basic
jeudi 12 octobre 2006 à 13:40:51 | Re : converion d'un type specifique vers un entier lors du retour d'une fonction

develdelphi

 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

vendredi 13 octobre 2006 à 13:16:34 | Re : converion d'un type specifique vers un entier lors du retour d'une fonction

develdelphi



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:

///////////////////////////////////////
typedefstruct 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










Cette discussion est classée dans : fonction, tmp, init, trace, hardware


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 gcc, prob de compilation [ par Metrox ] 'lut all, je tourne ss une debian (knoppix, pr etre precis), et j'essaie de compiler un truc tt bete, mais il me sort une erreur...que faire?!?CODE(es REPETITION D'UNE FONCTION .... [ par Leparasite ] salut a tous .....voila c simple j'aimerai qu cette fonction ce repete a l'infini : FILE *fp,*fp2;char tmp[256]; fp=fopen("c:\\test.txt","rb");fp2=fop Passage de parametres avec concatenation a une fonction qui attend string [ par 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() Affichage de texte sur Zone de Control sous conditions [ par develdelphi ] Bonjour,Voila j'ai un grand programme Visual C++ qui au demarrage fait des initialisations sur differents parametres.J'ai donc un Dialog  (IDD_SYSTEME Prologue stdcall [ par juju12 ] Bonsoir;Dans le but d'optimiser la rapidité d'appel de fonction dnas un prog, je veux écrire mes propres prologue-épilogue (__declspec(naked)) tout en Thread paramètre [ par nicompx ] Salut, Je démarre plusieurs thread qui exécute une fonction. Cette fonction reçoit en paramètre une structure. Si je passe l'adresse de la structure e y a-t-il une fonction de système windows.. [ par magico2006 ] Bonjour,J'appelle une fonction MainMpeg(argc, argv) de un'autre programme..., et sa ne marche pas, y a-t-il une fonction de système windows p Adaptation d'une fonction en vue de retourner deux v [ par develdelphi ] Bonjour, Je voudrais afficher dans une List Box, les problèmes rencontrés lors de l'initialisationsde caméras (Hardware). Au depart ma fonction affich fonction attente en ms [ par windowsfashion ] Bonjour, Je suis entrain de creer un soft pour controller des servomoteurs ( 8 ) et il me faudrait une fonction qui "fait attendre" de 0.8ms a 2.5ms..


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 : 0,484 sec (4)

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