GNT sans publicité, site mobile, fonctionnalitées exclusives...

limite traitement programme console ?

Le
ologram
Bonjour,

Je programme en amateur.

Au boulot nous travaillons sur windows XP avec un émulateur VT320 vers
un programme sur un serveur linux.

Je ne suis pas autorisé à "attaquer" les tables du programme, et pour
pouvoir palier à certains manques de ce programme, je rappatrie des
données vers une base de données Access.

Pour cela j'ai réalisé une macro en C dans un programme console, qui
fait des copiers/coller vers un fichier txt. J'envois de touches
virtuelles puis je récupère le clipboard et j'extrais les éléments
qui m'intéressent que je place dans des variables.

Tout fonctionne correctement, sauf quand je lance la macro sur un grand
nombre de "fiches" à copier. J'ai réalisé des tests et ai ajouté
procédures de vérification mais rien à faire mon programme plante
vers le 200ème écran copié.

J'ai recopié les éléments de Dr Watson pour les plantages mais
évidemment je ne comprends pas les messages des fautes répertoriées.
J'espèrais avoir toujour le même message d'erreur mais ce n'est pas
le cas.

Y a t'il une masse maximum d'éléments qu'un programme console peut
traiter ?

Y a t'il moyen de décripter les messages d'erreurs de Dr WATSON. Sinon
existe t'il un moyen de surveiller mon application et de récupérer
des informations me permettant de comprendre ce qui plante ?

Merci pour vos informations

ologram
Lire les 22 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 5
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
ologram
Le #9790861
Autres questions concernant les plantages de mon appli.

Serait-il possible que cela soit dû à un problème de saturation du
clipboard, par ex. pas plus de 200 copier/coller ?

ologram
mika
Le #9790831
"ologram" news:

Tout fonctionne correctement, sauf quand je lance la macro sur un grand
nombre de "fiches" à copier. J'ai réalisé des tests et ai ajouté
procédures de vérification mais rien à faire mon programme plante
vers le 200ème écran copié.
J'ai recopié les éléments de Dr Watson


Ca, c'est forcément un bug dans ton programme (alloc memoire, tableau, ..)
Mais si on le voit pas..
ologram
Le #9790821
Voici le code.

Ce que je ne comprend pas c'est que si je redémarre à l'endroit où
cela a calé, tout se passe bien jusqu'à 200 copies d'écran plus
loin...

Merci pour vos remarques

ologram
---------
#include #include #include
void EnvoiToucheNorm( int Touche );
void EnvoiTouchExt( int Touche );
void EnvoiTprixHTVAchComb(int Touche1, int Touche2);
char *ExtractBuf(int coord, int lgueur, char *VarSortie);
char *ExtractBufReel(int coord, int lgueur, char *VarSortie);
char *ExtractBufFormat(int coord, int lgueur, char *VarSortie);
void RecupBuf(void);
void RecupVarBC(void);
void FichierBC(void);
void RecupVarDet(void);
void CopColNotepad(void);
void CopColVt320(void);

char blanc[4]=" ";
char engBCaa[5];
char engBCno[6];
char noBCaa[5];
char noBCno[6];
char Fourn[10];
char dateBC[11];
char noArt[21];
char Art[31];
char nbLignes[10];
/*char *noLigne=(char *)malloc(sizeof(char) * 10); */

struct OutBCD
{
char noLigne[20];
char engBCDaa[5];
char engBCDno[6];
char dateBCD[11];
char detFourn[78];
char noProd[16];
char quantite[20];
char prix[12];
char prixHTVA[12];
char prixTotLigne[13];
char TauxTVA[5];
} BCDvar;

char montTotHTVA[14];
char montTotTVA[14];
char montTotTTC[14];
char AdresLiv[33];
char Tab[3]="t";
char slash[3]="/";
char Ligne[3]="n";
char *ptr;
char *fin="";
int i, j, k, s, inbLignes, InoLigne;
char Buffer[2000];
int comptage;
char Fenetre[]="vt320";
FILE *fp;


int main(int argc, char *argv[])
{

HWND RunFile;
HWND hwnd;
RunFile = FindWindow(Fenetre,NULL);

if (RunFile == 0)
{
MessageBox (NULL, "Aucune fenêtre "ICL" ouverte" , "Erreur", 0
+ MB_ICONSTOP);
return 0;
}
if (RunFile != 0)
{
SetForegroundWindow(FindWindow(Fenetre, NULL));
Sleep(150);
}

comptage = 1;
while (comptage <= 800)
{
CopColVt320();
RecupBuf();
RecupVarBC();
FichierBC();
EnvoiToucheNorm(VK_D);

/* arrivée dans l'écran Detail du bon de commande */
CopColVt320();
RecupBuf();
printf("%sn", Buffer);
VerificationBuf();
ExtractBuf(1873, 9, nbLignes);
printf("nbLignes : %sn", nbLignes);
strrev(nbLignes);
ptr = strchr(nbLignes, '/');
nbLignes[ptr-nbLignes] = '';
strrev(nbLignes);
printf("nbLignes_2 : %sn", nbLignes);
inbLignes = atoi(nbLignes);
printf("inbLignes : %in", inbLignes);

InoLigne = 1;
RecupVarDet();
inbLignes = inbLignes - 6;
printf("inbLignes = %in", inbLignes);

while (inbLignes > 0)
{
printf("inbLignes du for %i = %in", s, inbLignes);
for (i=0; i<6; i++) EnvoiTouchExt(VK_DOWN);
Sleep(1000);
CopColVt320();
Sleep(150);
RecupBuf();
RecupVarDet();
inbLignes = inbLignes -6;
}

EnvoiToucheNorm(VK_E);
EnvoiTouchExt(VK_RIGHT);
Sleep(1000);
inbLignes = 0;
comptage +=1;
}
return 0;
}

void EnvoiTouchExt( int Touche )
{
keybd_event(Touche,MapVirtualKey(Touche,0),KEYEVENTF_EXTENDEDKEY,0);
Sleep(50);
keybd_event(Touche,MapVirtualKey(Touche,0),KEYEVENTF_KEYUP +
KEYEVENTF_EXTENDEDKEY,0);
}
void EnvoiToucheNorm( int Touche )
{
keybd_event(Touche,MapVirtualKey(Touche,0),0,0);
Sleep(50);
keybd_event(Touche,MapVirtualKey(Touche,0),KEYEVENTF_KEYUP,0);
}

void EnvoiTchComb(int Touche1, int Touche2)
{
keybd_event(Touche1,MapVirtualKey(Touche1,0),0,0);
keybd_event(Touche2,MapVirtualKey(Touche2,0),0,0);
keybd_event(Touche1,MapVirtualKey(Touche1,0),KEYEVENTF_KEYUP,0);
}

char *ExtractBuf(int coord, int lgueur,char *VarSortie)
{
j= coord;
for (i=0; i < lgueur; i++, j++)
VarSortie[i] = Buffer[j];
VarSortie[i] = '';
return (VarSortie);
}

char *ExtractBufReel(int coord, int lgueur, char *VarSortie)
{
j= coord;
for (i=0; i < lgueur; i++, j++)
VarSortie[i] = Buffer[j];
VarSortie[i] = '';
strrev(VarSortie);
ptr = strchr(VarSortie, ' ');
VarSortie[ptr-VarSortie] = '';
strrev(VarSortie);
return (VarSortie);
}

char *ExtractBufFormat(int coord, int lgueur, char *VarSortie)
{
j= coord;
for (i=0; i < lgueur; i++, j++)
VarSortie[i] = Buffer[j];
VarSortie[i] = '';
ptr = strstr(VarSortie, blanc);
if (ptr != 0) VarSortie[ptr-VarSortie] = '';
return (VarSortie);
}

void RecupVarDet(void)
{
for (s=0; s < 6 & s < inbLignes; s++)
{
ExtractBufReel(284, 5, BCDvar.engBCDno);
printf("%sn", BCDvar.engBCDno);
ExtractBuf(259, 4, BCDvar.engBCDaa);
printf("%sn", BCDvar.engBCDaa);
itoa(InoLigne, BCDvar.noLigne, 10);
printf("Recup_noLigne = %sn", BCDvar.noLigne);
InoLigne = InoLigne + 1;
ExtractBufFormat(822+(s*82*2), 77, BCDvar.detFourn);
printf("%sn", BCDvar.detFourn);
ExtractBufReel(766+(s*82*2), 11, BCDvar.prixHTVA);
printf("%sn", BCDvar.prixHTVA);
ExtractBuf(794+(s*82*2), 4, BCDvar.TauxTVA);
printf("%sn", BCDvar.TauxTVA);
ExtractBuf(312, 10, BCDvar.dateBCD);
printf("%sn", BCDvar.dateBCD);
ExtractBufReel(753+(s*82*2), 11, BCDvar.quantite);
printf("%sn", BCDvar.quantite);
ExtractBuf(740+(s*82*2), 15, BCDvar.noProd);
printf("%sn", BCDvar.noProd);
ExtractBufReel(802+(s*82*2), 12, BCDvar.prixTotLigne);
printf("%s/%sn", BCDvar.engBCDaa, BCDvar.engBCDno);
printf("InoLigne : %in", InoLigne);
if ((fopen("outBCd.txt", "r"))== NULL)
{
MessageBox (NULL, "Erreur : impossible d'ouvrir outBCd.txt
" , "ERREUR",
0 + MB_ICONEXCLAMATION + MB_SYSTEMMODAL);
printf("Erreur %c l'ouverture de "outBCd.txt"n", 133); /*
%c, 133 = à */
break;
}
else
{
fp = fopen("outBCd.txt", "a");
fputs(BCDvar.engBCDaa, fp);
fputs(Tab, fp);
fputs(BCDvar.engBCDno, fp);
fputs(Tab, fp);
fputs(BCDvar.engBCDaa, fp);
fputs(slash, fp);
fputs(BCDvar.engBCDno, fp);
fputs(Tab, fp);
fputs(BCDvar.noLigne, fp);
fputs(Tab, fp);
fputs(BCDvar.dateBCD, fp);
fputs(Tab, fp);
fputs(BCDvar.detFourn, fp);
fputs(Tab, fp);
fputs(BCDvar.noProd, fp);
fputs(Tab, fp);
fputs(BCDvar.quantite, fp);
fputs(Tab, fp);
fputs(BCDvar.prixHTVA, fp);
fputs(Tab, fp);
fputs(BCDvar.TauxTVA, fp);
fputs(Tab, fp);
fputs(BCDvar.prixTotLigne, fp);
fputs(Ligne, fp);
fclose(fp);
}
}
}

void RecupBuf(void)
{
if (IsClipboardFormatAvailable(CF_TEXT))
{
if (OpenClipboard(0))
{
HGLOBAL hGlobal=GetClipboardData(CF_TEXT);
lstrcpy(Buffer, (char *) GlobalLock(hGlobal));
GlobalUnlock(hGlobal);
CloseClipboard();
}
}
}

void CopColNotepad(void)
{
EnvoiTchComb(VK_CONTROL, VK_A);
Sleep(150);
EnvoiTchComb(VK_CONTROL, VK_C);
Sleep(150);
}

void CopColVt320(void)
{
Sleep(3000);
EnvoiTchComb(VK_MENU, VK_E);
Sleep(150);
EnvoiToucheNorm(VK_A);
Sleep(150);
EnvoiTchComb(VK_MENU, VK_E);
Sleep(150);
EnvoiToucheNorm(VK_C);
}


void RecupVarBC(void)
{
printf("%sn", Buffer);

ExtractBuf(178, 4, noBCaa);
printf("noBCaa = %sn", noBCaa);

ExtractBufReel(185, 5, noBCno);
printf("noBCno = %sn", noBCno);

ExtractBuf(260, 4, engBCaa);
printf("engBCaa = %sn", engBCaa);

ExtractBufReel(272, 5, engBCno);
printf("engBCno = %sn", engBCno);

ExtractBufReel(378, 9, Fourn);
printf("Fourn = %sn", Fourn);

ExtractBuf(426, 10, dateBC);
printf("dateBC = %sn", dateBC);

ExtractBufReel(508, 13, montTotHTVA);
printf("montTotHTVA = %sn", montTotHTVA);

ExtractBufReel(590, 13, montTotTVA);
printf("montTotTVA = %sn", montTotTVA);

ExtractBufReel(672, 13, montTotTTC);
printf("montTotTTC = %sn", montTotTTC);


ExtractBuf(914, 20, noArt);
printf("noArt = %sn", noArt);

ExtractBuf(1408, 30, Art);
printf("Art = %sn", Art);

ExtractBuf(1500, 32, AdresLiv);
printf("AdresLiv = %sn", AdresLiv);

}

void FichierBC(void)
{ if ((fopen("outBC.txt", "r"))== NULL)
{
MessageBox (NULL, "Erreur : impossible d'ouvrir outBC.txt
" , "ERREUR",
0 + MB_ICONEXCLAMATION + MB_SYSTEMMODAL);
printf("Erreur %c l'ouverture de "outBC.txt"n", 133); /*
%c, 133 = à */
/*break; */
}
else
{
fp = fopen("outBC.txt", "a");
fputs(engBCaa, fp);
fputs(Tab, fp);
fputs(engBCno, fp);
fputs(Tab, fp);
fputs(engBCaa, fp);
fputs(slash, fp);
fputs(engBCno, fp);
fputs(Tab, fp);
fputs(noBCaa, fp);
fputs(Tab, fp);
fputs(noBCno, fp);
fputs(Tab, fp);
fputs(noBCaa, fp);
fputs(slash, fp);
fputs(noBCno, fp);
fputs(Tab, fp);
fputs(Fourn, fp);
fputs(Tab, fp);
fputs(dateBC, fp);
fputs(Tab, fp);
fputs(montTotHTVA, fp);
fputs(Tab, fp);
fputs(montTotTVA, fp);
fputs(Tab, fp);
fputs(montTotTTC, fp);
fputs(Tab, fp);
fputs(noArt, fp);
fputs(Tab, fp);
fputs(Art, fp);
fputs(Tab, fp);
fputs(AdresLiv, fp);
fputs(Tab, fp);
fputs(Ligne, fp);
fclose(fp);
}
}
Paul Bacelar
Le #9790771
Donnez nous le debug des logs de DrWatson pour avoir une idée du type
d'erreur.
Utilisez des outils comme ADPLUS
(http://www.microsoft.com/whdc/devto...fault.mspx)
Avant de faire des hypothèses, il vaut mieux avoir un maximum d'information
pour ne pas faire fausse route.
--
Paul Bacelar
ologram
Le #9790731
Est-ce que l'erreur peut provenir de itoa, qui se trouve dans
RecupVarDet() ?

ologram
Publicité
Suivre les réponses
Poster une réponse
Anonyme