[windows] port // Createfile() Writefile()

port // Createfile() Writefile() [windows] - C++ - Programmation

Marsh Posté le 31-08-2003 à 00:40:22    

Salut,
 
Dsl j'ai fais une recherche sur le forum et j'ai pas trouvé mon bonheur.  
Evidement c'est sur l'acces au port parallele sous les systemes base NT.
 
Je comprend rien au explication donné sur ces fonctions sur internet (souvent en anglais et ca m'aide pas)
 
Alors voila ce que j'ai trouvé pour ouvrir le port:  

Code :
  1. HANDLE hCom;
  2. hCom = CreateFile(
  3.     "LPT1",                       
  4.     GENERIC_READ | GENERIC_WRITE,
  5.     0,                         
  6.     NULL,                       
  7.     OPEN_EXISTING,               
  8.     0,
  9.     NULL                       
  10.   );


 
et sur writefile :  
WriteFile(hCom,Message,NbOctet,&nBytesWrite,NULL);
 
Mais je comprend rien aux parametres de ces fonctions.
 
Merci d'avance


Message édité par JPhi le 31-08-2003 à 01:40:37
Reply

Marsh Posté le 31-08-2003 à 00:40:22   

Reply

Marsh Posté le 31-08-2003 à 01:41:21    

Apprends l'anglais, c'est presque indispendable a moins de trouver une bonne doc en francais...
 
ben sinon CreateFile(), comme son nom l'indique, sert a créer ou ouvrir un fichier, une console, une pipe, un port série ou //, etc. Il retourne le 'handle', c'est a dire le descripteur (si qqun a un nom mieux en fr) correspondant.
 
et WriteFile, bah pour écrire dans le bordel ouvert.
Ses parametres :
 
BOOL WriteFile(
  HANDLE hFile,  // Handle retourné par CreateFile
  LPCVOID lpBuffer,  // Buffer correspondant a ce que tu veux écrire
  DWORD nNumberOfBytesToWrite, // Taille du Buffer
  LPDWORD lpNumberOfBytesWritten, // variable servant a indiquer en retour le nb d'octets écrits
  LPOVERLAPPED lpOverlapped // oublie pour l'instant
);
et ca retourne 0 si ca a raté.
 
en gros, par ex si je veux écrire "truc bordel", je fais :

Code :
  1. DWORD dw;
  2. BOOL b = WriteFile(hFile, "truc bordel", 11, &dw, NULL);
  3. if (!b)
  4. {
  5.   // Raté
  6. }


 
.

Reply

Marsh Posté le 31-08-2003 à 11:21:42    

merci j'essaye de ce pas  :jap:  
 
Marrant ton pseudo  :lol:

Reply

Marsh Posté le 31-08-2003 à 13:07:13    

marche po   :(  
 
Le port COM1 s'ouvre correctement mais je vois pas d'envoi de donnée quand j'utilise writefile().
Et sur le LPT1 j'ai rien.
voici ce que j'ai mi:

Code :
  1. HANDLE hCom;
  2. hCom = CreateFile(
  3.     "LPT1",                       
  4.     GENERIC_READ | GENERIC_WRITE,
  5.     0,                                NULL,                       
  6.     OPEN_EXISTING,               
  7.     0,
  8.     NULL                         
  9.   );
  10. DWORD dw;
  11.   BOOL b = WriteFile("LPT1", "A", 1, &dw, NULL);
  12. if (!b)
  13. {
  14.       // Raté
  15. }


 
Et j'ai l'état de D0-D7 qui ne bouge pas.
 
 [:cpu]  

Reply

Marsh Posté le 31-08-2003 à 17:03:30    

Me suis trompé pour Writefile c'est hCom et pas "LPT1" qui faut mettre.  :pfff:  
 
J'ai essayé sur le port com et ca marche sans probleme.
Mais sur le port // toujours sans succes.
 
Help ya personne qui l'a deja fait ?  :cry:

Reply

Marsh Posté le 31-08-2003 à 19:39:12    

Ca marche.
 
Mais je viens de voir que j'ai 7 documents non imprimé dans la fenetre de gestion d'impression de mon imprimante ...  
 
Moi je veux juste imposé un niveau au bits de sortie D0-7 et pas envoyer un fichier à imprimer vers l'imprimante.  
 
Une idée ?

Reply

Marsh Posté le 31-08-2003 à 22:28:48    

j'ai jamais fait de port // ou série, mais faut pas oublier l'appel a CloseHandle(hCom) quand t'as fini tes opérations, ca peut expliquer pkoi y a des trucs en queue.
 
t'as ka mater les liens renvoyés par ca : (FR)
http://www.google.fr/search?q=Crea [...] %3Dlang_fr

Reply

Marsh Posté le 31-08-2003 à 22:32:06    

JPhi a écrit :

Ca marche.
 
Mais je viens de voir que j'ai 7 documents non imprimé dans la fenetre de gestion d'impression de mon imprimante ...  
 
Moi je veux juste imposé un niveau au bits de sortie D0-7 et pas envoyer un fichier à imprimer vers l'imprimante.  
 
Une idée ?

si tu as sous windows, je doute que tu puisses accéder directement au port // [:figti]  
A priori, il intercepte les demandes, pouvant venir de plusieurs applications.

Reply

Marsh Posté le 31-08-2003 à 23:08:43    

Konar a écrit :

j'ai jamais fait de port // ou série, mais faut pas oublier l'appel a CloseHandle(hCom) quand t'as fini tes opérations, ca peut expliquer pkoi y a des trucs en queue.


 
Je l'ai mi chef CloseHandle(hCom)  mais toujours le meme resultat.
 
 

Reply

Marsh Posté le 31-08-2003 à 23:11:08    

Je crois que Createfile utilise le protocol de transfere EPP et comme l'imprimante n'est pas connécté il me met le caractere dans un fichier en attente d'impression.
 
Et si c'est bien ca je suis pas couché  :pt1cable:

Reply

Marsh Posté le 31-08-2003 à 23:11:08   

Reply

Marsh Posté le 01-09-2003 à 01:20:19    

mrBebert a écrit :

si tu as sous windows, je doute que tu puisses accéder directement au port // [:figti]  
A priori, il intercepte les demandes, pouvant venir de plusieurs applications.


 
ouais je pense aussi. a mon avis c'est le driver qui intercepte tout ca, le seul moyen serait donc d'écrire ton propre driver, ou de désactiver ou outrepasser l'actuel driver, ptet en ouvrant de manière spéciale le port, ou en utilisant des appels systèmes plus basiques.

Reply

Marsh Posté le 01-09-2003 à 02:18:36    

Konar a écrit :


en utilisant des appels systèmes plus basiques.


 
Cad ? un copain m'a dit qu'en assembleur ca ne pose pas de probleme.

Reply

Marsh Posté le 01-09-2003 à 10:17:07    

Il me semble que CreateFile sur port // ne marche pas.
Des drivers ont déjà été développés. Cette question a déjà été traité et des bons liens donnés.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 01-09-2003 à 10:18:19    

Reply

Marsh Posté le 01-09-2003 à 11:25:41    

Merci HelloWorld,
 
A default d'autre solution je vais essayé ton driver.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed