Bonjour,
J'utilise un API biometric de mon PPC.
J'ai un code que j'arrive a faire fonctionner mais je voudrais lui ajouter un attribut.
En fait ma fonction ci-dessous recupere (a partir d'un fichier .dat) le caracteristique biometric de l'utilisateur.
J'ai ajouter le nom de l'utilisateur a la fin de la ligne apres des $$$_$$$ et je voudrais donc récuperer la biometrie et le nom associe.
J'ai donc trouve une fonction split et je l'ai appliqué a ma fonction.
Ca compile mais je n'arrive plus a m'authentfier ,ca match plus. donc c'est que je ne recupere plus la bonne donnee bimometric.

Code:
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
 
DWORD CDKBioAccessDlg::Identify(int Timeout)
{
   //////////// load stored templates to buffer //////////
   static unsigned char   *pTemplate;
   static BioAPI_BIR_PTR   pBIRarray;
   static BioAPI_BIR_PTR   pBIRptr;
   static int   len = 1024;
   static int   i;
   static int   nTemplates = 0;
   static WCHAR wcMsg[256];
 
   pTemplate = LoadTemplateDB(&nTemplates, BIODATA_PATH);
   if (!pTemplate)
   {
      if (nTemplates == 0)
      {
         wsprintf(wcMsg, _T("Empty DB: %s"), BIODATA_PATH);
         m_Message.SetWindowText(wcMsg);
         return BioAPI_ERRCODE_INTERNAL_ERROR;
      }
      wsprintf(wcMsg, _T("LoadTemplateDB error: nTemplates=%d"), nTemplates);
      m_Message.SetWindowText(wcMsg);
      return BioAPI_ERRCODE_INTERNAL_ERROR;
   }
 
   if (nTemplates == 0)
      {
         wsprintf(wcMsg, _T("Empty DB: %s"), BIODATA_PATH);
         m_Message.SetWindowText(wcMsg);
         return BioAPI_ERRCODE_INTERNAL_ERROR;
      }
 
   wsprintf(wcMsg, _T("%d templates loaded.\r\nPlease, pass your finger..."), nTemplates);
   m_Message.SetWindowText(wcMsg);
 
   pBIRarray = (BioAPI_BIR_PTR)malloc(nTemplates*sizeof(BioAPI_BIR));
   if (!pBIRarray)
   {
      free(pTemplate);
      goto IdentOut;
   }
   for (i=0; i<nTemplates; i++)
   {
      pBIRptr = pBIRarray + i;
//------ce qui ne marche pas ----->
      pBIRptr->BiometricData = (BioAPI_BIR_BIOMETRIC_DATA_PTR)(split((char *)pTemplate,"$$$_$$$",0)[0] + i*len);
//avant et ce qui fonctionne ---->  
pBIRptr->BiometricData = (BioAPI_BIR_BIOMETRIC_DATA_PTR)(pTemplate + i*len);
      pBIRptr->Header.Length = len + sizeof(BioAPI_BIR_HEADER);
   }
 
 
 
.....
 
 
//la fonction split
//Function to split char
char** split(char* chaine,const char* delim,int vide){
 
    char** tab=NULL;                    //tableau de chaine, tableau resultat
    char *ptr;                     //pointeur sur une partie de
    int sizeStr;                   //taille de la chaine à recupérer
    int sizeTab=0;                 //taille du tableau de chaine
    char* largestring;             //chaine à traiter
 
    int sizeDelim=strlen(delim);   //taille du delimiteur
 
 
    largestring = chaine;          //comme ca on ne modifie pas le pointeur d'origine
                                   //(faut ke je verifie si c bien nécessaire)
 
 
    while( (ptr=strstr(largestring, delim))!=NULL ){
           sizeStr=ptr-largestring;
 
           //si la chaine trouvé n'est pas vide ou si on accepte les chaine vide                   
           if(vide==1 || sizeStr!=0){
               //on alloue une case en plus au tableau de chaines
               sizeTab++;
               tab= (char**) realloc(tab,sizeof(char*)*sizeTab);
 
               //on alloue la chaine du tableau
               tab[sizeTab-1]=(char*) malloc( sizeof(char)*(sizeStr+1) );
               strncpy(tab[sizeTab-1],largestring,sizeStr);
               tab[sizeTab-1][sizeStr]='\0';
           }
 
           //on decale le pointeur largestring  pour continuer la boucle apres le premier elément traiter
           ptr=ptr+sizeDelim;
           largestring=ptr;
    }
 
    //si la chaine n'est pas vide, on recupere le dernier "morceau"
    if(strlen(largestring)!=0){
           sizeStr=strlen(largestring);
           sizeTab++;
           tab= (char**) realloc(tab,sizeof(char*)*sizeTab);
           tab[sizeTab-1]=(char*) malloc( sizeof(char)*(sizeStr+1) );
           strncpy(tab[sizeTab-1],largestring,sizeStr);
           tab[sizeTab-1][sizeStr]='\0';
    }
    else if(vide==1){ //si on fini sur un delimiteur et si on accepte les mots vides,on ajoute un mot vide
           sizeTab++;
           tab= (char**) realloc(tab,sizeof(char*)*sizeTab);
           tab[sizeTab-1]=(char*) malloc( sizeof(char)*1 );
           tab[sizeTab-1][0]='\0';
 
    }
 
    //on ajoute une case à null pour finir le tableau
    sizeTab++;
    tab= (char**) realloc(tab,sizeof(char*)*sizeTab);
    tab[sizeTab-1]=NULL;
 
    return tab;
}
Si quelqu'un a une idee
Merci beaucoup