UnExPeCtEdSpy
Messages postés139Date d'inscriptionmercredi 7 août 2002StatutMembreDernière intervention 3 juillet 2003
-
10 mai 2003 à 01:41
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
10 mai 2003 à 13:44
Bonjour,
je suis plus familier du vb que du c++ alors j'vous d'mande de l'aide :
J'utilise une Dll en c+ avec un prog en Vb qui manipule des fichiers.
Quand j'execute une fonction de ma dll qui agit sur un fichier, par la suite il m'est impossible de suprimer le fichier en question (même aprés arret de vb6 il faut que je ferme vb6 pour pouvoir a nouveau supprimer le fichie, surement parce que la dll est encore en memoire)
Voici briévement les fonctions que je suspecte dans la dll
1) j'effectue un :
[...]
hFile = CreateFile( filename, // filename
GENERIC_READ, // access level
FILE_SHARE_READ, // share mode
NULL, // security attirubtes not needed
OPEN_EXISTING, // don't create a new file
FILE_FLAG_BACKUP_SEMANTICS,
NULL ); // no template file
[...]
2)
BackupRead( hFile, // file handle
Buf, // buffer to write the data
sizeof( Buf ), // size of the buffer
&read, // return value for bytes read
FALSE, // used to clear the data
TRUE, // back up the security descriptor
&context ))
[...]
3) et tout a la fin
if( !BackupRead( hFile, // file handle
NULL, // buffer to write the data
0, // size of the buffer
&read, // return value for bytes read
TRUE, // used to clear the data
FALSE, // back up the security descriptor
&context ))
CloseHandle( hFile );
Est ce que mon probleme serait inhérent a cette parite? ou bien parce que dans une autre partie de ma dll je change les privilege du procees??
Help please, j'ai vraiment besoin de pouvoir suprimer les fichiers meme en leur ayant appliqué le traitement par la Dll
UnExPeCtEdSpy
Messages postés139Date d'inscriptionmercredi 7 août 2002StatutMembreDernière intervention 3 juillet 2003 10 mai 2003 à 01:44
Apparement ça marche si je fait un CloseHandle( hFile ); inconditionel a la fin du fichier. Est ce que je peus suprimer carrement le test 3) ou est ce qu'il est mal fait... a vrai dire je sais pas a koi il sert .
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 10 mai 2003 à 08:16
CloseHandle( hFile ); DOIT etre inconditionnel, sors le du test. Celui a effectuer est au debut sur CreateFile(), sortie directe si retourne -1.
BruNews, ciao...
UnExPeCtEdSpy
Messages postés139Date d'inscriptionmercredi 7 août 2002StatutMembreDernière intervention 3 juillet 2003 10 mai 2003 à 12:45
Salut BruNews
Merci, et on en arrive directe a ma seconde question (eh oui tu n'a pas d'bol lol) j'ai transformé la fonction qui contenais ce code en procedure (void mafuntion etc) et donc avant pour sortir direct aprés le test de CreateFile() il y avait un 'return (-1)' mais maintenant que c'est une fonction comment faire une sortie directe? Sachant que si je mets un 'exit' pour ça il sort directe mais il tues aussi mon prog vb?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 10 mai 2003 à 13:15
idem:
return -1;
dans ta fonction si -1 te convient comme indicateur d'erreur. Entendu qu'on ne sort jamais par exit, de toutes les manieres il est a bannir dans un prog Win32.
BruNews, ciao...
Vous n’avez pas trouvé la réponse que vous recherchez ?
UnExPeCtEdSpy
Messages postés139Date d'inscriptionmercredi 7 août 2002StatutMembreDernière intervention 3 juillet 2003 10 mai 2003 à 13:34
Oups désolé il y a une faute de frappe dans mon text :
"Merci, et on en arrive directe a ma seconde question (eh oui tu n'a pas d'bol lol) j'ai transformé la fonction qui contenais ce code en procedure (void mafuntion etc) et donc avant pour sortir direct aprés le test de CreateFile() il y avait un 'return (-1)' mais maintenant que c'est une procedure comment faire une sortie directe? Sachant que si je mets un 'exit' pour ça il sort directe mais il tues aussi mon prog vb?"
En fait c'est d'une procedure qui ne renvoie rien que je ne sais pas sortir en cours d'execution, quand je met un return(-1); il me dit 'void function returning a value'?
UnExPeCtEdSpy
Messages postés139Date d'inscriptionmercredi 7 août 2002StatutMembreDernière intervention 3 juillet 2003 10 mai 2003 à 13:43
Lol non c bon répond pas, j'suis vraiment une nouille
y a pas de probleme je peus la déclarer comme étant int mafonction(...) dans la dll et lui faire un return(-1) tout en conservant une déclaration de type sub dans mon vb.
Donc tout marche impecable now, c'est parfait pour moi
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 10 mai 2003 à 13:44
Y a pas de procedure en C, c'est une illusion VB. Tout est fonction, void indique seulement au prog appelant que valeur de EAX est indefinie en sortie.
si tu laisses void alors:
return; // tout sec
BruNews, ciao...