IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

CreateFile et GUID


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Points : 12
    Points
    12
    Par défaut CreateFile et GUID
    Bonjour,
    J'essaie d'ouvrir un device USB avec CreateFile (borland).
    Mon handle est toujours invalide.

    Ma fonction est de ce type:
    hUsb=CreateFile("\\?\usb#vid_05ca&pid_1834#5&349ef221&0&8#{a5dcbf10-6530-11d2-901f-00c04fb951ed}",
    GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,
    FILE_FLAG_OVERLAPPED,NULL);

    if(hUsb == INVALID_HANDLE_VALUE) .......

    Le GUID est intercepté par la variable :detail->DevicePath , donc correcte.
    J'ai essayé differents formats "\\.\usb, \\\\?\\usb, \\\\.\\usb....." mais sans succès.
    L'alignement des données sur le compilateur est en byte.
    Quelqu'un aurait il la soluce car cela fait quelques jours que je cherche à avoir un handle

    Merci

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    CreateFile (borland).
    CreateFile c'est Microsotf, la fonction borland c'est FileCreate (encapsulant Win32 ou Linux dès D6)

    L'alignement des données sur le compilateur est en byte.
    L'unité "Windows.h" force un alignement sur 8 de toute façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #pragma option push -b -a8 -pc -A- /*P_O_Push*/
    -a8 passe en 8

    Quelle version de BCB ? 3 à 2007 ? ou entre 2009 à XE3... ?
    Quel mapping wchar_t si >= 2009 indiquant CreateFileA ou CreateFileW

    je doublerais les \ ainsi :
    CreateFile("\\\\?\\usb#vid...
    Pour le reste ta chaine semble effectivement correcte

    Tu évoques DevicePath, je suppose que c'est en référence à l'exemple : How to Access a USB Device by Using WinUSB Functions (Windows Drivers) - Create a File Handle for the Device


    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Merci, effectivement hUsb me retourne un pointeur int.

    char mapTemp[256];
    strcpy(mapTemp,"\\.\usb#vid_05ca&pid_1834#5&349ef221&0&8#{a5dcbf10-6530-11d2-901f-00c04fb951ed}");
    hUsb=FileCreate(mapTemp);



    J'utilise le Borland C++ 5.0.

    Reste à savoir utilise read/write pour dialoguer sur l'usb.
    Tout de meme drole que je ne puisse pas utilise l'api de windows sous Borland.

    DevicePath provient effectivement de la librairie win api (qui elle fonctionne sur Borland).
    Je passerai le source complet lecture /ecriture sur usb lorsqu'il sera fonctionnel.
    Ca devrait etre valable sous Borland 6 et XE

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    J'ai tout de meme difficile à comprendre l'équivalence de "DeviceIoControl" pour lire ou écrire les trames FileWrite ou FileRead en Borland c++.

    DeviceIoControl est parametré par:
    #define IOCTL_USBIO_WRITE_PACKET

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Citation Envoyé par Grizou0 Voir le message
    J'utilise le Borland C++ 5.0.
    J'en doute, c'est Borland C++ Builder 5 avec la bibliothèque VCL
    Borland C++ 5.0 existe aussi, il me semble qu'il utilisait la bibliothèque OWL, c'est un autre environnement de développement de Borland

    x2
    Citation Envoyé par Grizou0 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char mapTemp[256];
    strcpy(mapTemp,"\\.\usb#vid_05ca&pid_1834#5&349ef221&0&8#{a5dcbf10-6530-11d2-901f-00c04fb951ed}");
     hUsb=FileCreate(mapTemp);
    FileCreate utilise une AnsiString, tu n'as pas besoin de char[] ou de strcpy

    ceci suffit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hUsb = FileCreate("\\\\.\\usb#vid_05ca&pid_1834#5&349ef221&0&8#{a5dcbf10-6530-11d2-901f-00c04fb951ed}");
    Utilise GetLastError\SysErrorMessage après FileCreate\CreateFile

    Citation Envoyé par Grizou0 Voir le message
    Ca devrait etre valable sous Borland 6 et XE
    Sur XE faudrait faire attention à l'unicode
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Retour sur CreateFile et Borland C++ ( biblio win)
    J'ai enfin réussi 'par chance' à ouvrir un handle.
    Fallait trouver la conversion, sinon rien ne va.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    void __fastcall TForm1::ResumeUSBClick(TObject *Sender)
    {
    HANDLE HUSB;
    char Guid[256];
     if(DetectDevice(0xC251,0x1A01,Guid)) //IdDevice, IdVendor
       {
       //  retourne Guid:  "\\\\?\\usb#vid_c251&pid_1a01#0001a0000000#{a5dcbf10-6530-11d2-901f-00c04fb951ed}\0}\0ÌqÕ\0ÌqÕ\0`\0\0\0\x10\0\0\0\x13\0\0\0\0\0\0\0\x01\0\0\0 \0\0\0\x13\0\0\0\0\0\0\0\x02\0\0\00\0\0\0\x13\0\0\0\0\0\0\0\x01\0\0\0@\0\0\0\x13\0\0\0\0\0\0\0\x03\0\0\0P\0\0\0\x13\0\0\0\0\0\0\0\x01\0\0\0`\0\0\0\x17\0\0\0\x01\0\0\0\x04\0\0\0C251\0\0\0\0\x16\0\0\0\0\0\0\0\x04\0\0\01A01\0\0\0\0\x16\0\0\0\0\0\0\0\x04\0\0\0C251\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
       Memo->Lines->Add("Device trouvé");
       //Convertion Guid:  "\\.xsb#vid_c251&pid_1a01#0001a0000000#{a5dcbf10-6530-11d2-901f-00c04fb951ed}\0}\0}\0ÌqÕ\0ÌqÕ\0`\0\0\0\x10\0\0\0\x13\0\0\0\0\0\0\0\x01\0\0\0 \0\0\0\x13\0\0\0\0\0\0\0\x02\0\0\00\0\0\0\x13\0\0\0\0\0\0\0\x01\0\0\0@\0\0\0\x13\0\0\0\0\0\0\0\x03\0\0\0P\0\0\0\x13\0\0\0\0\0\0\0\x01\0\0\0`\0\0\0\x17\0\0\0\x01\0\0\0\x04\0\0\0C251\0\0\0\0\x16\0\0\0\0\0\0\0\x04\0\0\01A01\0\0\0\0\x16\0\0\0\0\0\0\0\x04\0\0\0C251\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
       strcpy(Guid,"\\.\usb#vid_c251&pid_1a01#0001a0000000#{a5dcbf10-6530-11d2-901f-00c04fb951ed}");
       HUSB=CreateFile(Guid  , GENERIC_READ |GENERIC_WRITE,
                              0, NULL, OPEN_EXISTING, 0, NULL);
       if(HUSB == INVALID_HANDLE_VALUE)   Memo->Lines->Add("Erreur Creation Handle");
       else
          {
           Memo->Lines->Add("Creation Handle OK");
     
           CloseHandle( HUSB );
          }
       }
     else Memo->Lines->Add("Device non trouvé");
    }
    Le Guid de base est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int R=0;R<256;R++) Guid[R]=detail->DevicePath[R];
    La convertion adéquate se fait par strcpy....problème unicode...

    PS: ShaiLeTrollJe prends bien note de tes remarques, mais j'essaie de faire fonctionner le code en premier.
    Effectivement, c'est du Borland C++ 5.0 builder pour etre précis.
    Il me reste ce fameux DeviceIoControl à faire fonctionner.
    Merci.

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Finalement, le handle n'est pas correcte.
    J'ai laissé tombé après trop de temps de galère.
    Je suis passé sous nrComm et la, tout fonctionne.
    Dommage....

Discussions similaires

  1. Les distributions GNU/Linux et BSD + Guide pour choisir sa distribution Linux
    Par Community Management dans le forum Distributions
    Réponses: 1
    Dernier message: 23/09/2006, 18h20
  2. Réponses: 3
    Dernier message: 23/06/2004, 21h17
  3. Guide du développeur Delphi devant un problème
    Par Bestiol dans le forum Delphi
    Réponses: 0
    Dernier message: 24/03/2004, 22h51
  4. guide des NURBS
    Par MrDuChnok dans le forum OpenGL
    Réponses: 7
    Dernier message: 10/01/2003, 14h29
  5. CreateFile
    Par PEM dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/07/2002, 15h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo