Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1676 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  configuration port parallele sous windows xp

 

Sujet(s) à lire :
    - Visual C++
 

 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

configuration port parallele sous windows xp

n°1034046
samuel63
Posté le 04-04-2005 à 10:08:49  profilanswer
 

Bon voila mon probleme,
je voudrais transmettre des donnees via une interface cree sous visual C++ vers une carte d'acquisition,celle ci va memoriser ces donnees et les envoyer vers une carte d'asservissement affin de commander des miroirs pour la projection du lazer,donc le probleme c'est qu'il fallait reconfigurer le port parallele du PC sachant que je travaille avec visual C++ et le systeme utilisé est le windows XP? j'attendrais votre réponse......MERCI D'AVANCE.....


Message édité par samuel63 le 11-04-2005 à 09:26:39
mood
Publicité
Posté le 04-04-2005 à 10:08:49  profilanswer
 

n°1034628
Joel F
Real men use unique_ptr
Posté le 04-04-2005 à 18:24:48  profilanswer
 

http://forum-images.hardware.fr/themes_static/images_forum/1/recherche.gif
 
sujet abordé X fois ici ...

n°1035297
samuel63
Posté le 05-04-2005 à 09:18:23  profilanswer
 

et pourtant j'ai fait un petit tour dans le forum,il y avait pas mal d'idees mais j'ai pas trouvé exactement ce que je cherche,si vous avez une petite idée n'hésitez pas...................

n°1035312
HelloWorld
Salut tout le monde!
Posté le 05-04-2005 à 09:40:39  profilanswer
 
n°1035432
samuel63
Posté le 05-04-2005 à 10:54:55  profilanswer
 

j'ai visité ces pages,et j'ai fait une petite recherche à INTERNET,et j'ai remarqué que la lecture/ecriture sur le port parallele est differente suivant le système utilisé,par exemple,pour mon cas,la programmation sous visual C++ pour configurer sous windows XP n'est pas la même qu'en travaillant sur win 98,sous winXP on peut utiliser un driver ou un dll,et pour moi je ne sait pas lequel utiliser et qui s'adapte à mon application,suite à une recherche à INTERNET j'ai trouvé le programme à l'adresse suivante:http://www.geekhideout.com/iodll.shtml
les deux programmes sont dans les deu fichiers io.h et io.cpp,donc je ne sait si ces deux programmes sont valables ou pas............

n°1035433
ToxicAveng​er
Posté le 05-04-2005 à 10:55:07  profilanswer
 

titre en caps, pas bon ca...

n°1035505
chepa_jeml​s
Posté le 05-04-2005 à 11:52:03  profilanswer
 

ben on a vu que au cours, ya pas trop moyen sous windows xp à cause d'un protection!! tu devrais retouner sous win 98

n°1035508
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-04-2005 à 11:53:13  profilanswer
 

merci d'éditer ton titre et de virer les majuscules stp, sinon je ferme


---------------
J'ai un string dans l'array (Paris Hilton)
n°1035526
HelloWorld
Salut tout le monde!
Posté le 05-04-2005 à 12:13:28  profilanswer
 

Sous XP il te faut un driver, qui s'utilise via une dll.
Fait une recherche sur comment on utilise une dll...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1035727
samuel63
Posté le 05-04-2005 à 14:12:01  profilanswer
 

c'est ce que j'ai fait,et suite à cette recherche il me demande d'utiliser les deux programmes qui seront d'apres ce que j'ai compris à mon programme de base sous visual C++,les deux programmes sont les suivans:
 
 
#include "io.h"
 
PORTOUT PortOut;
PORTWORDOUT PortWordOut;
PORTDWORDOUT PortDWordOut;
PORTIN PortIn;
PORTWORDIN PortWordIn;
PORTDWORDIN PortDWordIn;
SETPORTBIT SetPortBit;
CLRPORTBIT ClrPortBit;
NOTPORTBIT NotPortBit;
GETPORTBIT GetPortBit;
RIGHTPORTSHIFT RightPortShift;
LEFTPORTSHIFT LeftPortShift;
ISDRIVERINSTALLED IsDriverInstalled;
 
HMODULE hio;
 
void UnloadIODLL() {
 FreeLibrary(hio);
}
 
int LoadIODLL() {
 hio = LoadLibrary("io" );
 if (hio == NULL) return 1;
 
 PortOut = (PORTOUT)GetProcAddress(hio, "PortOut" );
 PortWordOut = (PORTWORDOUT)GetProcAddress(hio, "PortWordOut" );
 PortDWordOut = (PORTDWORDOUT)GetProcAddress(hio, "PortDWordOut" );
 PortIn = (PORTIN)GetProcAddress(hio, "PortIn" );
 PortWordIn = (PORTWORDIN)GetProcAddress(hio, "PortWordIn" );
 PortDWordIn = (PORTDWORDIN)GetProcAddress(hio, "PortDWordIn" );
 SetPortBit = (SETPORTBIT)GetProcAddress(hio, "SetPortBit" );
 ClrPortBit = (CLRPORTBIT)GetProcAddress(hio, "ClrPortBit" );
 NotPortBit = (NOTPORTBIT)GetProcAddress(hio, "NotPortBit" );
 GetPortBit = (GETPORTBIT)GetProcAddress(hio, "GetPortBit" );
 RightPortShift = (RIGHTPORTSHIFT)GetProcAddress(hio, "RightPortShift" );
 LeftPortShift = (LEFTPORTSHIFT)GetProcAddress(hio, "LeftPortShift" );
 IsDriverInstalled = (ISDRIVERINSTALLED)GetProcAddress(hio, "IsDriverInstalled" );
 
 atexit(UnloadIODLL);
 
 return 0;
}
 
et le deuxieme est le suivant:
 
 
#include <windows.h>
 
typedef void (WINAPI *PORTOUT) (short int Port, char Data);
typedef void (WINAPI *PORTWORDOUT)(short int Port, short int Data);
typedef void (WINAPI *PORTDWORDOUT)(short int Port, int Data);
typedef char (WINAPI *PORTIN) (short int Port);
typedef short int (WINAPI *PORTWORDIN)(short int Port);
typedef int (WINAPI *PORTDWORDIN)(short int Port);
typedef void (WINAPI *SETPORTBIT)(short int Port, char Bit);
typedef void (WINAPI *CLRPORTBIT)(short int Port, char Bit);
typedef void (WINAPI *NOTPORTBIT)(short int Port, char Bit);
typedef short int (WINAPI *GETPORTBIT)(short int Port, char Bit);
typedef short int (WINAPI *RIGHTPORTSHIFT)(short int Port, short int Val);
typedef short int (WINAPI *LEFTPORTSHIFT)(short int Port, short int Val);
typedef short int (WINAPI *ISDRIVERINSTALLED)();
 
extern PORTOUT PortOut;
extern PORTWORDOUT PortWordOut;
extern PORTDWORDOUT PortDWordOut;
extern PORTIN PortIn;
extern PORTWORDIN PortWordIn;
extern PORTDWORDIN PortDWordIn;
extern SETPORTBIT SetPortBit;
extern CLRPORTBIT ClrPortBit;
extern NOTPORTBIT NotPortBit;
extern GETPORTBIT GetPortBit;
extern RIGHTPORTSHIFT RightPortShift;
extern LEFTPORTSHIFT LeftPortShift;
extern ISDRIVERINSTALLED IsDriverInstalled;
 
extern int LoadIODLL();
 
 
donc je ne sais pas si ça fonctionne ou pas avec ça?
 
 
 

mood
Publicité
Posté le 05-04-2005 à 14:12:01  profilanswer
 

n°1035735
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-04-2005 à 14:15:30  profilanswer
 

bon, t'en as rien à faire de ce que je t'ai dit, tant pis


---------------
J'ai un string dans l'array (Paris Hilton)
n°1040458
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-04-2005 à 16:57:38  profilanswer
 

bon, je réouvre et je uppe pour ce monsieur, à qui j'ai expliqué en MP comment éditer son titre et virer les caps :o


---------------
J'ai un string dans l'array (Paris Hilton)
n°1040502
samuel63
Posté le 08-04-2005 à 17:17:16  profilanswer
 

merci,et bien j'attends les instructions,

n°1040513
GuiGui312
Posté le 08-04-2005 à 17:20:23  profilanswer
 

Ta toujours pas éditer là :??:  
 
LES MAJUSCULES CA FAIT MAL AUX YEUX  
 
C'est illisible :)

n°1050696
samuel63
Posté le 18-04-2005 à 14:20:36  profilanswer
 

et bien,il y'a pas mal de visiteurs et personnes ne veut me répondre!!!!!!!!!!!!!!!!!!!!!!!!!!!!

n°1059976
samuel63
Posté le 25-04-2005 à 16:06:48  profilanswer
 

coucou,il y'a quelqu'un,le problème des majuscules c'est réglé,s'il y'a une personne qui pourrait me répondre ou il a une connaissance sur le sujet,il sera le bien...........?

n°1060130
papy_danon​e
Posté le 25-04-2005 à 18:18:01  profilanswer
 

sous windows xp, il suffit de faire un "mini" driver qui lit simplement les données sur le port parallele et les ecrit. (port 378, 379, 37A, mais en fait on pourrait acceder à tous les ports, attention certains ports sont qu'en lecture seul). Ensuite ton programme communique avec ce driver pour acceder à ces ports.
Il faut faire un driver car windows xp interdit aux programmes en mode utilisateur d'acceder à ces ports. Seules les programmes tournant en mode noyau peuvent y acceder (driver).


Message édité par papy_danone le 25-04-2005 à 18:21:15
n°1060414
HelloWorld
Salut tout le monde!
Posté le 25-04-2005 à 20:57:20  profilanswer
 

Ca dépend. Si c'est pour envoyer du texte tu peux ouvrir le fichier LPT1 et lire/écrire dessus.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1060906
samuel63
Posté le 26-04-2005 à 10:22:40  profilanswer
 

merci à vous de me répondre,en faite je vais vous expliquer le but de la manipulation,mon travail consistait à relier une interface réalisée sous le logiciel microsoft visual studio.net à des scanners pour projeter du lazer,donc cette interface sert à commander le lazer,donc j'ai conçu la carte d'acquisition qui reçoit les données du port parallele et les envoie vers mes scanners,mais il reste le problème de communiquer ces données de mon programme de commande vers ma carte et bien sur via le port parallele,sachant que je travaille sous windows xp,je suis plutôt éléctromécanicien,donc j'en suis conscient qu'on ne peut pas communiquer directement avec le port parallele et qu'on aura besoin d'un driver,on peut pas trouver des exemples sur internet des drivers en plus en programmation visual c++ .net

n°1061533
samuel63
Posté le 26-04-2005 à 16:39:46  profilanswer
 

j'ai fait une visite dans le forum et j'ai remarqué qu'il y avait qui avait proposé d'utiliser le driver decrit dans l'adresse suivante:http://www.internals.com/utilities/winio.zip  
sachant que je travaille sur windows xp service pack 1;
pensez vous que ce driver est fonctionnel dans ces conditions?

n°1062154
HelloWorld
Salut tout le monde!
Posté le 27-04-2005 à 00:57:15  profilanswer
 

A priori oui, mais il te faudra être administrateur pour faire fonctionner ton logiciel.
Si la communication avec ton scanner se fait en envoyant du texte / des données, tu peux te contenter d'ouvrir le fichier LPT1 et lire / écrire dessus.
http://msdn.microsoft.com/library/ [...] serial.asp


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1062355
samuel63
Posté le 27-04-2005 à 10:39:08  profilanswer
 

pouvez vous m'eclaircir un peu l'idée,ou je peu le trouver ce fichier,en plus il y aura quoi dans ce fichier?

n°1062380
HelloWorld
Salut tout le monde!
Posté le 27-04-2005 à 10:47:20  profilanswer
 

Ce fichier on le "trouve" si un port parallèle est installé.
C'est pas un vrai fichier sur disque, c'est une émulation. EN ouvrant le fichier LPT1, tout se passe comme si on lisait / écrivait dans un fichier normal, sauf que à la place Windows envoie / lit des données depuis le port parallèle.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1062780
samuel63
Posté le 27-04-2005 à 14:31:50  profilanswer
 

oui le fichier lpt1 existe et se trouve à l'adresse 378,et ensuite il faut faire quoi,il y aura un programme à faire?

n°1062812
HelloWorld
Salut tout le monde!
Posté le 27-04-2005 à 14:52:43  profilanswer
 

Je sais pas comment il s'utilise ton périphérique. Et à priori tu cherches à faire un programme, non ?
Tu peux tenter de jouer avec cmd, mais ça va être limité...

Code :
  1. echo "coucou" > LPT1



---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1062979
samuel63
Posté le 27-04-2005 à 16:21:28  profilanswer
 

le programme est deja réalisé,il me reste à relier mon programme(de projection lazer) à ma carte de réception des données,c'est pour ça il me faut un driver pour envoyer ces données,je pense que je vais essayer avec le logiciel winIO,je pense qu'il va me permettre par la suite de finir mon programme avec c++ en utilisant input affin d'activer les broches utiles suivant l'ordre de mes commandes.......

n°1062988
HelloWorld
Salut tout le monde!
Posté le 27-04-2005 à 16:25:55  profilanswer
 

Il te faut un driver si tu veux faire des choses pointues sur le port paralèlle, genre contrôler manuellement l'état des broches.
Si tu utilises un protocole de communication classique, ben depuis ton programme existant, travailles directement sur le fichier LPT1.

Code :
  1. FILE * lpt1 = fopen( "LPT1", "w" );
  2. fprintf( lpt1, "coucou\n" );$*
  3. fclose( lpt1 );


l'envoie de données peut se faire sans driver spécial.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1064394
samuel63
Posté le 28-04-2005 à 15:31:28  profilanswer
 

je n'ai pas essayé avec lpt1,mais j'ai essayé d'envoyer des boucles avec outp à la fin de mon programme principale de projection,et à la sortie mes scanners ne bougent pas,voila l'allure de mon programme:
 
 
 
#pragma once
 
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::Xml;
using namespace System::Threading;
using namespace System::Timers;
 
#include "forme.h"
#include "gestionXML.h"
#include <conio.h>
 
namespace projection
{
 /// <summary>  
 /// Description résumée de projeter
 ///
 /// AVERTISSEMENT : Si vous modifiez le nom de cette classe, vous devrez également modifier la  
 ///          propriété 'Nom du fichier de ressources' de l'outil de compilation de ressource managée  
 ///          pour tous les fichiers .resx dont dépend cette classe. Dans le cas contraire,
 ///          les concepteurs ne pourront pas interagir correctement avec les ressources
 ///          localisées associées à ce formulaire.
 /// </summary>
 public __gc class projeter : public System::Windows::Forms::Form
 {
 public:  
  projeter(String *fichier)
  {
   InitializeComponent();
   images=new ArrayList() ;
 
   if (!chargerImages(fichier))
    Close() ;
 
   int duree[]=DUREES_PREVISUALISATION ;
   int i ;
   int max=0 ;
 
   for (i=0; duree[i]; i++)
    max=Math::Max(duree[i].ToString()->Length, max) ;
 
   for (i=0; duree[i]; i++)
    this->dudDuree->Items->Add(String::Concat(new String(32, max+1-duree[i].ToString()->Length), duree[i].ToString(), S" ms" )) ;
  }
         
 protected:  
  void Dispose(Boolean disposing)
  {
   if (disposing && components)
   {
    components->Dispose();
   }
   __super::Dispose(disposing);
  }
 
 private: System::Windows::Forms::GroupBox *  groupBox1;
 private: System::Windows::Forms::Button *  btstart;
 private: System::Windows::Forms::RadioButton *  rbanimation;
 private: System::Windows::Forms::RadioButton *  rbimage;
 private: System::Windows::Forms::PictureBox *  zoneGraphique;
 private: System::Windows::Forms::ListBox *  lbImages;
 private: System::Windows::Forms::DomainUpDown *  dudDuree;
 private: System::Windows::Forms::NumericUpDown *  numericUpDown1;
 private: System::Windows::Forms::CheckBox *  checkBox1;
 private: System::Windows::Forms::Button *  btAllumer;
 private: System::Windows::Forms::Button *  btEteindre;
 
 
 private:
  //
  // <summary>
  // Variable nécessaire au concepteur.
  // </summary>
  System::ComponentModel::Container* components;
  //
  // <summary>
  // Méthode requise pour la prise en charge du concepteur - ne modifiez pas
  // le contenu de cette méthode avec l'éditeur de code.
  // </summary>
  void InitializeComponent(void)
  {
   System::Resources::ResourceManager *  resources = new System::Resources::ResourceManager(__typeof(projection::projeter));
   this->groupBox1 = new System::Windows::Forms::GroupBox();
   this->btEteindre = new System::Windows::Forms::Button();
   this->btAllumer = new System::Windows::Forms::Button();
   this->checkBox1 = new System::Windows::Forms::CheckBox();
   this->numericUpDown1 = new System::Windows::Forms::NumericUpDown();
   this->dudDuree = new System::Windows::Forms::DomainUpDown();
   this->btstart = new System::Windows::Forms::Button();
   this->rbanimation = new System::Windows::Forms::RadioButton();
   this->rbimage = new System::Windows::Forms::RadioButton();
   this->zoneGraphique = new System::Windows::Forms::PictureBox();
   this->lbImages = new System::Windows::Forms::ListBox();
   this->groupBox1->SuspendLayout();
   (__try_cast<System::ComponentModel::ISupportInitialize *  >(this->numericUpDown1))->BeginInit();
   this->SuspendLayout();
   //  
   // groupBox1
   //  
   this->groupBox1->Controls->Add(this->btEteindre);
   this->groupBox1->Controls->Add(this->btAllumer);
   this->groupBox1->Controls->Add(this->checkBox1);
   this->groupBox1->Controls->Add(this->numericUpDown1);
   this->groupBox1->Controls->Add(this->dudDuree);
   this->groupBox1->Controls->Add(this->btstart);
   this->groupBox1->Controls->Add(this->rbanimation);
   this->groupBox1->Controls->Add(this->rbimage);
   this->groupBox1->Location = System::Drawing::Point(24, 288);
   this->groupBox1->Name = S"groupBox1";
   this->groupBox1->Size = System::Drawing::Size(496, 88);
   this->groupBox1->TabIndex = 32;
   this->groupBox1->TabStop = false;
   this->groupBox1->Text = S"Projeter";
   //  
   // btEteindre
   //  
   this->btEteindre->FlatStyle = System::Windows::Forms::FlatStyle::Popup;
   this->btEteindre->Location = System::Drawing::Point(240, 56);
   this->btEteindre->Name = S"btEteindre";
   this->btEteindre->Size = System::Drawing::Size(64, 24);
   this->btEteindre->TabIndex = 43;
   this->btEteindre->Text = S"Eteindre";
   this->btEteindre->Click += new System::EventHandler(this, OnEteindre);
   //  
   // btAllumer
   //  
   this->btAllumer->FlatStyle = System::Windows::Forms::FlatStyle::Popup;
   this->btAllumer->Location = System::Drawing::Point(240, 24);
   this->btAllumer->Name = S"btAllumer";
   this->btAllumer->Size = System::Drawing::Size(64, 24);
   this->btAllumer->TabIndex = 42;
   this->btAllumer->Text = S"Allumer";
   this->btAllumer->Click += new System::EventHandler(this, OnAllumer);
   //  
   // checkBox1
   //  
   this->checkBox1->Location = System::Drawing::Point(384, 24);
   this->checkBox1->Name = S"checkBox1";
   this->checkBox1->Size = System::Drawing::Size(104, 16);
   this->checkBox1->TabIndex = 41;
   this->checkBox1->Text = S"coché données";
   //  
   // numericUpDown1
   //  
   this->numericUpDown1->Location = System::Drawing::Point(328, 24);
   System::Int32 __mcTemp__1[] = new System::Int32[4];
   __mcTemp__1[0] = 255;
   __mcTemp__1[1] = 0;
   __mcTemp__1[2] = 0;
   __mcTemp__1[3] = 0;
   this->numericUpDown1->Maximum = System::Decimal(__mcTemp__1);
   this->numericUpDown1->Name = S"numericUpDown1";
   this->numericUpDown1->Size = System::Drawing::Size(48, 20);
   this->numericUpDown1->TabIndex = 40;
   //  
   // dudDuree
   //  
   this->dudDuree->Location = System::Drawing::Point(112, 24);
   this->dudDuree->Name = S"dudDuree";
   this->dudDuree->ReadOnly = true;
   this->dudDuree->Size = System::Drawing::Size(112, 20);
   this->dudDuree->TabIndex = 39;
   this->dudDuree->Text = S"durée d\'exposition";
   //  
   // btstart
   //  
   this->btstart->FlatStyle = System::Windows::Forms::FlatStyle::Popup;
   this->btstart->Location = System::Drawing::Point(352, 56);
   this->btstart->Name = S"btstart";
   this->btstart->Size = System::Drawing::Size(96, 24);
   this->btstart->TabIndex = 30;
   this->btstart->Text = S"Démarrer";
   this->btstart->Click += new System::EventHandler(this, OnDemarrerProjection);
   //  
   // rbanimation
   //  
   this->rbanimation->Checked = true;
   this->rbanimation->Location = System::Drawing::Point(16, 24);
   this->rbanimation->Name = S"rbanimation";
   this->rbanimation->Size = System::Drawing::Size(88, 24);
   this->rbanimation->TabIndex = 27;
   this->rbanimation->TabStop = true;
   this->rbanimation->Text = S"L\'animation";
   //  
   // rbimage
   //  
   this->rbimage->Location = System::Drawing::Point(16, 56);
   this->rbimage->Name = S"rbimage";
   this->rbimage->Size = System::Drawing::Size(208, 24);
   this->rbimage->TabIndex = 28;
   this->rbimage->Text = S"Seulement l\'image sélectionnée";
   //  
   // zoneGraphique
   //  
   this->zoneGraphique->BackColor = System::Drawing::Color::White;
   this->zoneGraphique->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
   this->zoneGraphique->Cursor = System::Windows::Forms::Cursors::Cross;
   this->zoneGraphique->Location = System::Drawing::Point(264, 16);
   this->zoneGraphique->Name = S"zoneGraphique";
   this->zoneGraphique->Size = System::Drawing::Size(256, 256);
   this->zoneGraphique->TabIndex = 31;
   this->zoneGraphique->TabStop = false;
   //  
   // lbImages
   //  
   this->lbImages->Location = System::Drawing::Point(24, 16);
   this->lbImages->Name = S"lbImages";
   this->lbImages->Size = System::Drawing::Size(216, 251);
   this->lbImages->TabIndex = 30;
   this->lbImages->SelectedIndexChanged += new System::EventHandler(this, OnChangementImage);
   //  
   // projeter
   //  
   this->AutoScaleBaseSize = System::Drawing::Size(5, 13);
   this->ClientSize = System::Drawing::Size(544, 398);
   this->Controls->Add(this->groupBox1);
   this->Controls->Add(this->zoneGraphique);
   this->Controls->Add(this->lbImages);
   this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedSingle;
   this->Icon = (__try_cast<System::Drawing::Icon *  >(resources->GetObject(S"$this.Icon" )));
   this->MaximizeBox = false;
   this->MinimizeBox = false;
   this->Name = S"projeter";
   this->ShowInTaskbar = false;
   this->Text = S"Projeter l\'animation";
   this->groupBox1->ResumeLayout(false);
   (__try_cast<System::ComponentModel::ISupportInitialize *  >(this->numericUpDown1))->EndInit();
   this->ResumeLayout(false);
 
  }  
 
 
  //
  // <summary>
  // Liste des images
  // </summary>
  ArrayList *images ;
  //
  // <summary>
  // Couleur principale
  // </summary>
  Color coulPrincipale ;
  //
  // <summary>
  // Couleur de sélection
  // </summary>
  Color coulSelection ;
  //
  // <summary>
  // Couleur du calque
  // </summary>
  Color coulCalque ;
  //
  // <summary>
  // Thread pour la projection
  // </summary>
  Thread * thproj ;
  //
  // <summary>
  // Charger images
  // </summary>
  bool chargerImages(String *filename)
  {
   XmlTextReader* reader = NULL ;
   bool retval=true ;
 
   try {
 
    // Intitialise le reader avec le fichier et ignore les noeuds vides
    reader = new XmlTextReader(filename) ;
    reader->WhitespaceHandling = WhitespaceHandling::None ;
 
    // On rejoint le noeud racine "Projection"
    while (reader->Read() && (reader->NodeType != XmlNodeType::Element || String::Compare(reader->Name, S"Projection" )))
     ;
 
    // On doit être sur le noeud Projection
    if (reader->NodeType != XmlNodeType::Element || String::Compare(reader->Name, S"Projection" ))
     throw new Exception("Balise Animation ou Optimisation non trouvée" ) ;
     
    chargerCouleurs(reader) ;
    chargerImages(reader) ;
   
   } catch(Exception *e) {
    AFFICHE_ERREUR(String::Concat("Erreur lors du chargement à partir du fichier \"", filename, "\"\n\nCause : \n", e->ToString())) ;
    retval=false ;
   }
   
   if (reader!=0)
    reader->Close() ;
   
   if (images->Count)
    lbImages->SelectedIndex=0 ;
 
   return retval ;
  }
  //  
  // <summary>
  // Code spécifique au chargement des couleurs
  // </summary>
  void chargerCouleurs(XmlTextReader* reader)
  {
   // Lecture des couleurs  
   reader->MoveToContent() ;  
   coulPrincipale     = Color::FromArgb(System::Convert::ToInt32(reader->GetAttribute(S"CoulPrincipale" ))) ;
   coulSelection      = Color::FromArgb(System::Convert::ToInt32(reader->GetAttribute(S"CoulSelection" ))) ;
   coulCalque         = Color::FromArgb(System::Convert::ToInt32(reader->GetAttribute(S"CoulCalque" ))) ;
   reader->MoveToElement() ;
 
   // On se place sur le noeud suivant, qui doit donc être une vue
   reader->Read() ;
  }
  //  
  // <summary>
  // Code spécifique au chargement des lignesBrisees
  // </summary>
  void chargerImages(XmlTextReader* reader)
  {
   forme *f ;
 
   // Si il y a bien des images... (balise ouverte et fermante en même temps!)
   if (reader->NodeType == XmlNodeType::Element && !String::Compare(reader->Name, S"Forme" )) {
 
    // On charge les formes tant qu'on est pas sur la fin du fichier et qu'on est sur une forme
    while (!reader->EOF && reader->NodeType == XmlNodeType::Element && !String::Compare(reader->Name, S"Forme" )) {
     f=formeFromXML(reader) ;
     images->Add(f) ;
     lbImages->Items->Add(f->get_nom()) ;
    }
 
    // On a terminé de lire les formes, on vérifie que l'on est sur la balise fermante de Projection
    if (reader->NodeType != XmlNodeType::EndElement || String::Compare(S"Projection", reader->Name))
     throw new Exception("Erreur de syntaxe XML" ) ;
 
    if (lbImages->Items->Count)
     lbImages->SelectedItem=0 ;
   }
  }
  //  
  // <summary>
  // Quand on change d'image, redessine la zone graphique
  // </summary>
  System::Void OnChangementImage(System::Object *  sender, System::EventArgs *  e)
  {
   // On vérifie qu'un élément est sélectionné
   if (lbImages->SelectedIndex != -1) {
    Graphics *graphics ;
   
    // Effacer la zone graphique
    try {
     zoneGraphique->set_Image(new Bitmap(zoneGraphique->get_Width(), zoneGraphique->get_Height())) ;
    } catch (...) {
     throw new Exception(S"Erreur lors du chargement du bitmap" ) ;
    }
 
    // Pour éviter que ça ne plante au démarrage
    // en effet, vues n'est pas initialisé lors du premier appel de cette méthode
    try {
     Pen *NewPen = new Pen(coulPrincipale, 1) ;
     dynamic_cast<ligneBrisee*>(images->get_Item(lbImages->SelectedIndex))->paint(graphics=System::Drawing::Graphics::FromImage(zoneGraphique->get_Image()), NewPen) ;
     NewPen->Dispose() ;
    }
    CATCH_DEBUG // Affiche un message d'erreur uniquement si __DEBUG__ est défini
   
    zoneGraphique->set_Image(zoneGraphique->Image) ;
   
    graphics->Dispose() ;
   }
  }
  //  
  // <summary>
  // Quand l'utilisateur clique sur le bouton pour démarrer la projection
  // </summary>
  System::Void OnDemarrerProjection(System::Object *  sender, System::EventArgs *  e)
  {
   // S'il faut démarrer
   if (!String::Compare(btstart->Text, "Démarrer" )) {
     
    MessageBox::Show("Demarrage de la projection" ) ;
    btstart->Text=S"Arrêter" ;
    lbImages->Enabled=false ;
    rbanimation->Enabled=false ;
    rbimage->Enabled=false ;
    dudDuree->Enabled=false ;
    thproj  = new Thread(new ThreadStart(this, test /*projSelImg*/));
    thproj->Start() ;
   }
 
   // Il faut arrêter
   else {
    btstart->Text=S"Démarrer" ;
    lbImages->Enabled=true ;
    rbanimation->Enabled=true ;
    rbimage->Enabled=true ;
    dudDuree->Enabled=true ;
    thproj->Abort() ;
    thproj->Join() ;
   }
 
   /*
   for (i=0; i<1000; i++) {
    // Envoi de 11110000 sur la ligne de données
    outportb(0x378,0xF0) ;
   
    // Ligne de commade : X - X - X - X - /SELECT - /INIT - AUTOFEED - /STROBE
    outportb(0x37A,0x0F) ;
   }
   */
  }
 
  void test()
  {
 
   unsigned short adresse ;
   int valeur ;
 
   if (this->checkBox1->Checked == true)
    adresse=0x378 ;
   else
    adresse=0x37A ;
   
   valeur=Convert::ToInt32(this->numericUpDown1->Value) ;
   
   //Dialogue avec le port parallèle  
   
   _outp(0x37A, 12) ;
   
   while(1) {
    _outp(0x378, valeur) ;
    _outp(0x37A, 14) ;
    _outp(0x37A, 2) ;
    _outp(0x378, valeur) ;
    _outp(0x37A, 6) ;
    _outp(0x37A, 2) ;
    _outp(0x378, valeur) ;
    _outp(0x37A, 8) ;
    _outp(0x37A, 2) ;
    _outp(0x378, valeur) ;
    _outp(0x37A, 0) ;
    _outp(0x37A, 2) ;
   }
  }
 
  //  
  // <summary>
  // Pour projeter en boucle l'image sélectionnée
  // </summary>
  void projSelImg()
  {
   ligneBrisee *lb=dynamic_cast<ligneBrisee*>(images->get_Item(lbImages->SelectedIndex)) ;
   int i ;
 
   while(1)
    for (i=0 ; i<(int) lb->get_nbPoints(); i++)
     projeterPoint(lb->get_point(i)) ;
  }
  //  
  // <summary>
  // projeter un point
  // </summary>
  void projeterPoint(PointF pt)
  {
   this->rbimage->Text=pt.ToString() ;
   Thread::Sleep(500) ;
 
   
   /*
   // envoi du poids faible de x
   _outp(0x378,mat[i][j]);
   _outp(0x37A,15);
   _outp(0x37A,7);
   j++;  
   // envoi du poids fort de x    
   _outp(0x378,mat[i][j]);
   _outp(0x37A,13);
   _outp(0x37A,7);
   j++;  
   // envoi du poids faible de y
   _outp(0x378,mat[i][j]);  
   _outp(0x37A,3);
   _outp(0x37A,7);
   j++;  
   // envoi du poids fort de y    
   _outp(0x378,mat[i][j]);
   _outp(0x37A,1);
   _outp(0x37A,9);
   j++;
   for(l=0;l<vit;l++);
   if (j>=param[i*2]*4) j=0;
   */
 
  }
 
 
  System::Void OnAllumer(System::Object *  sender, System::EventArgs *  e)
  {
   _outp(0x37A, 12) ;
  }
 
  System::Void OnEteindre(System::Object *  sender, System::EventArgs *  e)
  {
   _outp(0x37A, 4) ;
  }
 
   
} ;
}
             

n°1064430
HelloWorld
Salut tout le monde!
Posté le 28-04-2005 à 15:47:57  profilanswer
 

Utilise les balses [ cpp ]
Que veux-tu qu'on fasse avec tout ce code ?
_outp c'est une mauvaise solution, ça ne marche pas sous XP. Si tu suis un peu le débat (ça fait plusieurs fois que j'ai des doutes), tu aurais compris que le driver sert à remplacer _outp.  
Et je reviens encore à la charge avec mon LPT1 ( :sweat: ), en .Net cette fois-ci:
http://support.microsoft.com/defau [...] roduct=vb6


Message édité par HelloWorld le 28-04-2005 à 15:48:39

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1064563
samuel63
Posté le 28-04-2005 à 16:50:59  profilanswer
 

[hParallelPort = CreateFile("LPT1", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, _
   OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero) ]
 
[Success = WriteFile(hParallelPort, Buffer, Buffer.Length, BytesWritten, IntPtr.Zero) ]
 
[Success = ReadFile(hSerialPort, Buffer, BytesWritten, BytesRead, IntPtr.Zero) ]
 
[Success = CloseHandle(hParallelPort) ]
 
ce sont ces codes la qu'il faut utiliser?
franchement la syntaxe me dit rien de tout,je ne suis pas spécialiste de la programmation comme vous,
je ne sait pas s'il faut modifier ces lignes,comment je pourrait introduire mes lignes de codes pour definir les broches à utiliser suivant un certain ordre de commande,par exemple je devrais commencer par faire un clear au debut,ensuite remplir mes 4registres,ensuite allumer le lazer,ensuite faire un chargement ldac.......c'est un exemple.......

n°1064615
HelloWorld
Salut tout le monde!
Posté le 28-04-2005 à 17:31:59  profilanswer
 

Avec CreateFile tu ouvres le fichier "LPT1", et tu écris / lis dedans avec WriteFile / ReadFile. Tu le ferme après utilisation avec CloseHandle.
Apparement tu bosses en Managed C++, inclut <windows.h> et tu auras accès à ces fonctions.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1065680
samuel63
Posté le 29-04-2005 à 14:00:11  profilanswer
 

donc j'ai commencé à introduire les lignes de codes,mais je connais pas la syntaxe des lignes à rajouter pour pour ecrire dans le fichier lpt1 parceque il parait qu'on peut pas lire dans ce fichier,les lignes à rajouter vont me permettre de commander mes fils d'adresse(select,init,autofeed du port parallele)affin de remplir les 4 registres de ma carte d'acquisition......avez vous une idée?..........
voila l'allure de la partie du programme que j'ai effectué,j'ai rien inventé,j'ai juste suivi l'exemple dans l'adresse que vous m'avez donné:
[try {
        // Parallel port
         Console.WriteLine("Accessing the LPT1 parallel port" );
        //pour ouvrir le fichier lpt1 du port parallele
        void hParallelPort = CreateFile("LPT1", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, _OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero)
  // Verifier si le fichier lpt1 est ouvert
  if hParallelPort.ToInt32 = -1  
  {
            Throw New CommException("Unable to obtain a handle to the LPT1 port" );
  }
        //pour ecrire dans le fichier lpt1
        Console.WriteLine("Writing the following data to LPT1: Test" );
        void Success = WriteFile(hParallelPort, Buffer, Buffer.Length, BytesWritten, IntPtr.Zero)
        if Success = False  
  {
            Throw New CommException("Unable to write to LPT1" );
  }
        Console.WriteLine(Ex.Message);
        //pour fermer le fichier lpt1
        void Success = CloseHandle(hParallelPort)
        if Success = False  
  {
            Console.WriteLine("Unable to release handle to LPT1" );
  }
  }
        Console.WriteLine("Press ENTER to quit" );
        Console.ReadLine()]

n°1066327
HelloWorld
Salut tout le monde!
Posté le 29-04-2005 à 22:45:53  profilanswer
 

Citation :

vont me permettre de commander mes fils d'adresse


Arf...c'est l'info que je te demande depuis le début, comment se passe ta communication avec ton bidule. Si tu dois jouer sur des broches précises, bon ben oublie CreateFile, et reprend le driver winio... Remplace tes _outp par le outportb de winio.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1068436
samuel63
Posté le 02-05-2005 à 10:04:10  profilanswer
 

Bonjour tout le monde,salut helloword,
donc j'ai testé ce programme et j'ai rien reçu au niveaude mes scanners,donc je vais installer le driver winio et j'éspère que ça va marcher.........

n°1068777
samuel63
Posté le 02-05-2005 à 14:30:33  profilanswer
 

salut,j'ai suivi la procédure dans le help de winio,jai généré mon programme et il me marque l'erreur suivante:
[e:\Mes documents\Visual Studio Projects\projection\projeter.h(16): fatal error C1083: Impossible d'ouvrir le fichier include : 'winio.h' : No such file or directory
]
c'est quoi ce problème la?

n°1068810
HelloWorld
Salut tout le monde!
Posté le 02-05-2005 à 14:39:04  profilanswer
 

Il trouve pas winio... Faut l'ajouter à ton projet, ou bien aux paths de VC++ (Outils->Options).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1068954
samuel63
Posté le 02-05-2005 à 16:44:00  profilanswer
 

apres génération du programme je trouve beaucoup d'erreur,113 erreurs,c'est des erreurs dans le fichier winio.h lorce que je l'ai rajouté comme répertoire pour le fichier include"winio.h".......

n°1068997
samuel63
Posté le 02-05-2005 à 17:01:02  profilanswer
 

en faite voila ce que j'ai fait,j'ai fait outil_option_projets_et la j'ai rajouté une nouvelle ligne pour la liste des fichiers include ,donc j'ai rajouté mon répertoire pour le fichier winio.h que j'ai installé sous windows,c'est ça la méthode ou pas?

n°1069365
HelloWorld
Salut tout le monde!
Posté le 02-05-2005 à 20:57:27  profilanswer
 

Oui.
Après les erreurs faut en donner quelques unes. Tu as inclus <windows.h> avant ?
Le mieux c'est de récupérer un exemple qui marche / compile, et de t'en servir comme base...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1069938
samuel63
Posté le 03-05-2005 à 09:34:14  profilanswer
 

merci du renseignement de windows.h,il reste que 4 erreurs et 4warnings,j'etais à 130,pour l'exemple donc vous avez parlé ou je pourrais le trouver?

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  configuration port parallele sous windows xp

 

Sujets relatifs
Charger BDD dans mySQL (Windows)RequestFocus & Windows 98 ...
Reconnaissanc d'un vbs sur windows 95, possible ?passage de parametres sous windows
programme en vba qui envoye des infos au port seriecreer une arborescence de type Windows exploreur
Easy php 1.6 changement de port ? urgent!!!!!![.net] c'est quoi "http://schemas.microsoft.com/cdo/configuration/smt"
Acces aux fonctionnalités windows en C.Windows logon
Plus de sujets relatifs à : configuration port parallele sous windows xp


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR