[C++] Programme Windows qui crash

Programme Windows qui crash [C++] - C++ - Programmation

Marsh Posté le 26-10-2001 à 16:44:40    

J'ai 2 probleme
 
1: J'initialise une fenêtre standard, l'applic se lance sans probleme mais quand je la ferme, la fenêtre se ferme bien mais le processus reste dans les tasks et bouffe 99% des ressources :(
 
2: Si j'appel ma fonction Test() dans WinMain , le programme marche quand je link et lance l'executable depuis VC++ mais si je lance l'exe indépendamment du compilateur le programme crash.
Pourquoi??? :cry:
 
void Test()
{
 HANDLE Test;
 LPWIN32_FIND_DATA File;
 
 Test = FindFirstFile("files/*.dat", File);
 
 FindClose(Test);
}

Reply

Marsh Posté le 26-10-2001 à 16:44:40   

Reply

Marsh Posté le 26-10-2001 à 18:44:43    

nan ca c bon
c bien

Code :
  1. FileClose( Test );


 
t sur que quand tu ferme ta fenetre, tu reste pas dans la boucle des msg?

 

[edtdd]--Message édité par TheJackal--[/edtdd]

Reply

Marsh Posté le 26-10-2001 à 18:51:27    

une variable du meme nom que la fonction ca peut entrainer la mort dans certain ca
 
le probleme vient du fait que tu passe un pointeur qui pointe...sur rien
et la fonction essaye d'ecrire dessus
 

Code :
  1. void Test()
  2. {
  3. HANDLE Test;
  4. WIN32_FIND_DATA File;
  5. Test = FindFirstFile("files/*.dat", &File);  
  6. FindClose(Test);  
  7. }


 
essaye ca
 
mais si t sur qu'il y a des fichiers.
sinon regarde si

Code :
  1. Test != INVALID_HANDLE_VALUE

avant de faire FindClose

 

[edtdd]--Message édité par TheJackal--[/edtdd]

Reply

Marsh Posté le 29-10-2001 à 10:18:29    

TheJackal a écrit a écrit :

une variable du meme nom que la fonction ca peut entrainer la mort dans certain ca
 
le probleme vient du fait que tu passe un pointeur qui pointe...sur rien
et la fonction essaye d'ecrire dessus
 
void Test()  
{  
HANDLE Test;  
WIN32_FIND_DATA File;  
 
Test = FindFirstFile("files/*.dat", &File);  
 
FindClose(Test);  
}
 
essaye ca
 
mais si t sur qu'il y a des fichiers.
sinon regarde si Test != INVALID_HANDLE_VALUE avant de faire FindClose  
 
 




 
Ca marche pas de le passer par référence il ne peut pas convertir de ** en * je pense que ca veut dire que File est deja un pointeur et qu'on peut pas passer par référence un pointeur. DOnc que faire?

Reply

Marsh Posté le 29-10-2001 à 10:26:03    

tu raconte koi? :pt1cable:

Reply

Marsh Posté le 29-10-2001 à 11:28:45    

lol j'ai trouvé l'erreur faut mettre un back slash au lieu d'un slash dans le path!

Reply

Marsh Posté le 29-10-2001 à 11:56:34    

ah non j'ai parlé trop vite en fait je viens de découvrir que c'est si j'apppel FindFirstFile("files/test.dat", File) et que le fichier existe ca crash, si j'appel FindFirstFile("files/tes.dat", File) ca crash plus, super non?

Reply

Marsh Posté le 29-10-2001 à 12:04:46    

reflechit...

Reply

Marsh Posté le 29-10-2001 à 12:14:09    

Ben j'ai réféchi et je pense que quand il trouve le fichier il arrive pas a écrire ses infos dans la structure LPWIN32_FIND_DATA et ca je pige pas pourquoi. J'ai passé mon objet File en paramètre comme il faut ou sinon je vois pas que faire de plus a part aller changer le code source de Windows ;)

Reply

Marsh Posté le 29-10-2001 à 12:16:34    

reflechit encore et regarde le code ke g ecrit...

Reply

Marsh Posté le 29-10-2001 à 12:16:34   

Reply

Marsh Posté le 29-10-2001 à 12:18:07    

tu c ce que c au moin LPWIN32_FIND_DATA ?

Reply

Marsh Posté le 29-10-2001 à 12:24:13    

c'est une structure, la fonction FindFirstFile est censé écrire dedans j'imagine.
 
J'ai essayé de passer le pointeur File par référence comme tu m'a dis mais ca compile pas:
cannot convert parameter 2 from 'struct _WIN32_FIND_DATAA ** ' to 'struct _WIN32_FIND_DATAA *'

Reply

Marsh Posté le 29-10-2001 à 12:41:00    

typedef WIN32_FIND_DATA *LPWIN32_FIND_DATA;
 
LPWIN32_FIND_DATA est donc un pointeur
en resumer tu fais un pointeur qui pointe sur que dalle et tu demande a la fonction d'ecrire dedans.
 
regarde bien mon example parce qu'il marche tres bien
j'ai pas seulement rajouter le passage par ref

Reply

Marsh Posté le 29-10-2001 à 13:10:06    

Ok j'avais pas vu la première fois, désolé! merci pour ton aide ca marche maintenant :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed