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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#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 !
(j'espère que je passerai pas trop pour un idiot, mais ça fait 4jours et nuits que je code non-stop, je commence à saturer... je passe à coté de trucs évident à la longue... )