Précédent   Forum du club des développeurs et IT Pro > C et C++ > Outils pour C & C++ > C++Builder
C++Builder Environnement de développement RAD C++Builder. Avant de poster -> F.A.Q C++Builder, Sources C++Builder
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 08/12/2012, 23h56   #1
Grizou0
Invité de passage
 
Inscription : mars 2008
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 8
Points : 0
Points : 0
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
Grizou0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 14h20   #2
ShaiLeTroll
Expert Confirmé Sénior
 
Avatar de ShaiLeTroll
 
Homme
Développeur C++\Delphi
Inscription : juillet 2006
Messages : 9 190
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur C++\Delphi
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2006
Messages : 9 190
Points : 13 239
Points : 13 239
Citation:
CreateFile (borland).
CreateFile c'est Microsotf, la fonction borland c'est FileCreate (encapsulant Win32 ou Linux dès D6)

Citation:
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 :
#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

Halte à la ségrégation des Cinémas, VO sur Paris, VF en Banlieue, Abonnement résilié !
ShaiLeTroll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 17h40   #3
Grizou0
Invité de passage
 
Inscription : mars 2008
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 8
Points : 0
Points : 0
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
Grizou0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 08h02   #4
Grizou0
Invité de passage
 
Inscription : mars 2008
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 8
Points : 0
Points : 0
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
Grizou0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 10h22   #5
ShaiLeTroll
Expert Confirmé Sénior
 
Avatar de ShaiLeTroll
 
Homme
Développeur C++\Delphi
Inscription : juillet 2006
Messages : 9 190
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur C++\Delphi
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2006
Messages : 9 190
Points : 13 239
Points : 13 239
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 :
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 :
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

Halte à la ségrégation des Cinémas, VO sur Paris, VF en Banlieue, Abonnement résilié !
ShaiLeTroll est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/12/2012, 15h09   #6
Grizou0
Invité de passage
 
Inscription : mars 2008
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 8
Points : 0
Points : 0
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 :
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 :
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.
Grizou0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2013, 11h18   #7
Grizou0
Invité de passage
 
Inscription : mars 2008
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 8
Points : 0
Points : 0
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....
Grizou0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h58.


 
 
 
 
Partenaires

Hébergement Web