Avis des PROS!

UnExPeCtEdSpy Messages postés 139 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 3 juillet 2003 - 10 mai 2003 à 01:41
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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

,.~*`'^~.(^. :question) .^),.~^'`*~.

7 réponses

UnExPeCtEdSpy Messages postés 139 Date d'inscription mercredi 7 août 2002 Statut Membre Derniè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 .

merci

,.~*`'^~.(^. :question) .^),.~^'`*~.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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...
0
UnExPeCtEdSpy Messages postés 139 Date d'inscription mercredi 7 août 2002 Statut Membre Derniè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?

Merci :)

,.~*`'^~.(^. :question) .^),.~^'`*~.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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...
0

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

Posez votre question
UnExPeCtEdSpy Messages postés 139 Date d'inscription mercredi 7 août 2002 Statut Membre Derniè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'?

voila désolé

,.~*`'^~.(^. :question) .^),.~^'`*~.
0
UnExPeCtEdSpy Messages postés 139 Date d'inscription mercredi 7 août 2002 Statut Membre Derniè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

Merci bcp
@+

,.~*`'^~.(^. :question) .^),.~^'`*~.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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...
0
Rejoignez-nous