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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
pastor
Messages : 54
Inscription : sam. 14/avr./2007 22:59

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

Message 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
Dernière modification par pastor le sam. 26/mai/2007 18:32, modifié 1 fois.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
pastor
Messages : 54
Inscription : sam. 14/avr./2007 22:59

Message 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
Répondre