Bonjour,

Je travail actuellement sur un projet OMR: Une personne coche les cases d'un questionnaire papier, on passe ce papier dans un lecteur optique, qui renvoit les données lues sur le PC via un port série.
Jusqu'a XP SP1 tout marchait correctement. Mais depuis que j'ai installer le SP2 j'ai le problème suivant : je ne lis pas toujours le bon nombre de caractères.

Pour résoudre en partie le problème j'ai ajouté une fonction de temporisation (voir code en bleu gras dans le code)

Pour la lecture j'utilise le code suivant

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
var
FAppro          : TApdComPort ;
...
begin
 //Initialisation 
 EnvoyerOrdreNouveauDocument ;

 ChaineRecue         := '';

 // Tant que l'utilisateur n'a pas mis fin a la lecture 
 While Flecture do
   begin

      { Laisse a l'application le temps de traiter ses messages }
      Application.ProcessMessages ;

      { On recupere les donnes renvoyees par le lecteur }
      if FAppro.CharReady then
        { On a recu un caractere }
        begin
         Try
            CaractereLu := FAppro.GetChar ;

            {
            L'instruction suivante est un hack pour contrer un bug sous XP.
            Ce bug ne renvoit pas la bonne chaine de caractère
            On écrit dans un fichier pour faire passer le temps
            {}
            If UseHackXP then
		WriteEcraseInLog('On lit un caractère.',FichierPasseTemps);
	  ChaineRecue := ChaineRecue + CaractereLu ;

         { Debut de document ? }
         If Pos(DebutDoc,ChaineRecue)>0 then
          DebutDocument := true ;
         { Debut d'enregistrement ? }
         If Pos(DebutEnr,ChaineRecue)>0 then
           ...
Avec le UseHackXP je diminue fortement le nombre d'erreur mais pas totalement

Si quelqu'un a une idée...

Merci d'avance