dd_isamu | Bonjour,
Je me balade assez souvent sur le site pour trouver des solutions à mes divers problèmes de programmation (surtout en C++ en fait) Mais j'avoue que là, bien que j'ai trouvé 2 ou 3 pistes, je n'arrive pas à faire ce que je voudrais et devrais faire... j'ai une super gestion d'erreur, sauf que celle-ci passe par un "goto", ce qui, dans ma section, nous est interdit du à la rupture de séquence... du coup j'ai essayé de remplacer cette gestion d'erreur par une fonction, mais, je sais pas pourquoi, j'arrive pas à trouver comment faire, ça change ma logique, ou ça appelle des fonctions qui ne me viennent pas à l'esprit... j'en sais rien. Si vous avez des idées elles sont les bienvenues...
Voici mon extrait de code le plus simple (j'ai une bonne vingtaine de sources dans le même genre si ça vous intéresse , il faut que je les corriges tous...).
Code :
- #include <stdio.h>
- #include <NIDAQmx.h>
- #define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else
- int main(void)
- {
- int32 error=0;
- TaskHandle taskHandle=0;
- int32 read;
- float64 data[10];
- char errBuff[2048]={'\0'};
- int i=0;
- /*********************************************/
- // DAQmx Configure Code
- /*********************************************/
- DAQmxErrChk (DAQmxCreateTask("",&taskHandle));
- DAQmxErrChk (DAQmxCreateAIVoltageChan(taskHandle,"Dev3/ai1","",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL));
- DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,"",10,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,10));
- /*********************************************/
- // DAQmx Start Code
- /*********************************************/
- DAQmxErrChk (DAQmxStartTask(taskHandle));
- /*********************************************/
- // DAQmx Read Code
- /*********************************************/
- DAQmxErrChk (DAQmxReadAnalogF64(taskHandle,10,10.0,DAQmx_Val_GroupByChannel,data,10,&read,NULL));
- printf("Acquired %d points\n",read);
- for(i=0;i<10;i++)
- {
- printf("TEST %f points\n", data[i]);
- };
- Error:
- if( DAQmxFailed(error) )
- DAQmxGetExtendedErrorInfo(errBuff,2048);
- if( taskHandle!=0 ) {
- /*********************************************/
- // DAQmx Stop Code
- /*********************************************/
- DAQmxStopTask(taskHandle);
- DAQmxClearTask(taskHandle);
- }
- if( DAQmxFailed(error) )
- printf("DAQmx Error: %s\n",errBuff);
- printf("End of program, press Enter key to quit\n" );
- getchar();
- return 0;
- }
|
Donc vous l'aurez compris, à chaque ligne je test ce que me renvoie la fonction, et je trouverai idiot de recopier entièrement tout mon code de gestion d'erreur à chaque ligne...
Merci d'avance ! Message édité par gilou le 02-06-2011 à 18:47:08
|