Page 1 sur 1

Essai d'utilisation d'une API Win32 (CreateFile) [RESOLU]

Publié : sam. 26/mai/2007 17:51
par pastor
Bonjour à tous,

J'essai d'exploiter une API Win 32 toute simple pour m'exercer et je n'y arrive pas. Le but de mon essai est simplement d'ouvrir un fichier txt avec une fonction native de Windows.

Voici l'exemple en C de l'utilisation de la fonction CreateFile que j'utilise :

Code : Tout sélectionner

HANDLE CreateFile(
   LPCTSTR lpFileName,
   DWORD dwDesiredAccess,
   DWORD dwShareMode,
   LPSECURITY_ATTRIBUTES lpSecurityAttributes,
   DWORD dwCreationDisposition,
   DWORD dwFlagsAndAttributes,
   HANDLE hTemplateFile
);
J'ai essayé ceci qui ne marche pas :

Code : Tout sélectionner

;- Choix du fichier
chemin.s = OpenFileRequester("Choisir un fichier", "", "Fichier texte|*.txt|All Files|*.*", 0)

If chemin

   ;Nous devons fournir un pointeur vers une chaîne ASCII contenant le
   ;nom du fichier du dossier

    *chemin = @chemin
    *Pointeur.String = @*chemin 
    
    ;- Ouverture du fichier
    hfile.l=CreateFile_(@*chemin,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,0)
    
    MessageRequester("Resultat","Handle du fichier : "+Str(hfile),#PB_MessageRequester_Ok)

Else
    MessageRequester("Erreur","Le fichier n'a pas été ouvert !",#MB_ICONERROR)
    End
EndIf

End
Le Handle du fichier retourne -1, ce qui ne doit pas être bon.

Le problème vient peut-être des pointeurs que je ne comprends pas bien ?

Laurent

Publié : sam. 26/mai/2007 18:09
par Dr. Dri
GENERIC_READ et les autres constantes se notes avec un dièse en PB

Code : Tout sélectionner

;- Choix du fichier
chemin.s = OpenFileRequester("Choisir un fichier", "", "Fichier texte|*.txt|All Files|*.*", 0)

If chemin

   ;Nous devons fournir un pointeur vers une chaîne ASCII contenant le
   ;nom du fichier du dossier

    *chemin = @chemin
    *Pointeur.String = @*chemin
   
    ;- Ouverture du fichier
    hfile.l=CreateFile_(@chemin,#GENERIC_READ,#FILE_SHARE_READ,0,#OPEN_EXISTING,#FILE_FLAG_BACKUP_SEMANTICS,0)
   
    MessageRequester("Resultat","Handle du fichier : "+Str(hfile),#PB_MessageRequester_Ok)

Else
    MessageRequester("Erreur","Le fichier n'a pas été ouvert !",#MB_ICONERROR)
    End
EndIf

End
Dri

Publié : sam. 26/mai/2007 18:31
par pastor
Super ! Merci DRI,

Ca marche maintenant, que je suis nul, en plus je le savais...

Je me suis aussi rendu compte qu'il n'y avait pas besoin de pointeur.

Voici le résultat :

Code : Tout sélectionner

;- Choix du fichier
chemin.s = OpenFileRequester("Choisir un fichier", "", "Fichier texte|*.txt|All Files|*.*", 0)

If chemin
        
    ;- Ouverture du fichier
    hfile.s=Str(CreateFile_(chemin,#GENERIC_READ,#FILE_SHARE_READ,Null,#OPEN_EXISTING,#FILE_FLAG_BACKUP_SEMANTICS,0))
    
    If hFile = "INVALID_HANDLE_VALUE"
      MessageRequester("Erreur","Le fichier n'a pas été ouvert !",#MB_ICONERROR)
    EndIf
    
    MessageRequester("Resultat","Handle du fichier "+chemin+" : "+hfile,#PB_MessageRequester_Ok)

Else
    MessageRequester("Erreur","Le fichier n'a pas été ouvert !",#MB_ICONERROR)
    End
EndIf

End


Laurent