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.
Je suis amener a afficher sur une List Box les erreurs d'initialisations
de deux cameras. Il existe deja une classe "CHardware" qui permet d'initialiser
pas mal de périphériques, elle interroge notamment les dll des cameras. D'autres classes font appel
aussi à cette classe.
A coté de ça, j'ai une classe "CViewSasInitialisation" qui a notamment la fonction "OnTimer()"
qui affiche sur la Liste Box les erreurs d'initialisations des deux cameras. Le but recherché.
Actuellement cette fonction "OnTimer" affiche des erreurs mais par le biais d'une variable
"m_initHardwarestatus" laquelle s'est crée lors de l'instanciation de la camera notament grâce
a la classe "CHardware" et plus precisement sa fonction Init() qui a envoit a cette variable des
numéros qui correspondent donc à différents types d'erreurs.Comme je vous avez deja dit
cette classe reçoit des données des dll des cameras mais ne retourne pas ces données car il
s'agit d'un type specifique (FRstval).
Les donnees que recoit la classe "CHardware" sont des textes du genre "FS_BAD_PARAMETER"
et ces textes sont definit par des #define dans une autre classe de mon programme, la classe "CInit".
Donc ce que je voudrais faire maintenant c'est modifier cette fonction Init() de la classe
"CHardware" afin qu'elle puisse retourner un type FRstval mais pour cela il faut que je passe
par une fonction supplementaire qui me convertirait le type (FRstval) par un type (intà
car en effet ma fonction Init() a comme valeur de retour un entier et de
plus que cette valeur sera passée à la variable "m_initHardwarestatus"
Au finalité cette variable passera à la fonction de la classe "CViewSasInitialisation"
qui affichera avec un switch le resultat sur la liste box.
En effet j'ai dans ma fonction 'isProblemHardware()' qui est apellée par cette
variable ''initHardwarestatus' de la fonction 'Ontimer(UINT nIDEvent)'
Fonction devant changer afin de recuperer les valeurs donnees par la dll a la variable tmp et qu'il faudra retourner a la variable ''initHardwarestatus'.
C'est dans cette fonction qu'il faut une conversion du retour tmp mais comment ?
//////
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; // ici retourner le temp avec conversion ??????
}
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;
}
}/////
La fonction qui devrait afficher sans doute encore avec un switch dans lequel on mettra la valeur de retour de la fonction Init()
/////
void CViewSasInitialisation::OnTimer(UINT nIDEvent)
{
unsigned int uiSecurity;
CString strDatalist;
uiSecurity=m_Init.Get_Params_Sas_Config_Securiy();
// Vérifie le mode de fonctionnement
if(nIDEvent==ID_CLOCK_SAS)
{
KillTimer(ID_CLOCK_SAS);
CMy99090Doc *pDoc= (CMy99090Doc *) GetDocument();
UpdateData(true);
if(uiSecurity& LEVEL_1)
{
if(pDoc->isProblemeAcquisition())
m_bPblAcquisition=true;
else
m_bPblAcquisition=false;
if(m_Init.Get_Params_General_ModeProcess ()==PROCESS_SAS_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");
m_ListeHardware.AddString (strDatalist); //////testali necessaire?
break;
case 2:
m_bPblHardware=true;
strDatalist.Format ("SetConfigFilePath Hardware 2 failed");
m_ListeHardware.AddString (strDatalist);
break;
case 3:
m_bPblHardware=true;
strDatalist.Format ("Initialize Hardware 1 NOK");
m_ListeHardware.AddString (strDatalist);
//("Explication Hardware 1 %s\n",FSRetVal_Names[tmp]); // ???
// 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;
/* default:
strDatalist.Format ("Dans une boucle");
m_ListeHardware.AddString (strDatalist);
m_ListeHardware.AddString (strDatalist);
break;
*/
/* default:
m_bPblHardware=true;
strDatalist.Format ("Init NOK, autres raisons %d");
m_ListeHardware.AddString (strDatalist);
break;
*/
}
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;
}/////
Enfin les define :
//////
#define SF_BAD_PARAMETERS 1
#define SF_CANNOT_OPEN_CAMERA 2
.........................
............../////
Donc je dois creer une fonction de conversion du type FSRetVal vers int
dans le return de la fonction Init()
Merci de m'aider.