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

Visual C++ Discussion :

[Debutant]Probleme avec le port série sous Visual C++ Exress Edition


Sujet :

Visual C++

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Points : 13
    Points
    13
    Par défaut [Debutant]Probleme avec le port série sous Visual C++ Exress Edition
    Dans mon projet je dois recevoir des information par le port série, j'ai trouvé de bons codes qui gerent le port série, qui fonctionne parfaitement sous Dev-C++, mais ayant commencé mon projet sous visual je voulais continuer dessus.

    J'utilise create file comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    HANDLE handle;
    handle = CreateFile((LPCWSTR)"COM1:", //Nom du port série
    GENERIC_READ|GENERIC_WRITE, //Type d'accès
    0, //Mode de partage
    NULL, //
    OPEN_EXISTING, //
    FILE_FLAG_OVERLAPPED, //NULL = synchrone, sinon asynchrone
    NULL); //
    Je test aprés de cette façons

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(handle == INVALID_HANDLE_VALUE)
        {
            cout<<"Erreur lors de l'ouverture du port COM"<<endl;;
            return FALSE;
        }
    Et pour mon grand desespoir cette condition et toujours verifiée.

    Les bibliothéque incluses sont <iostream> et <windows.h>

  2. #2
    Membre averti
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Je suis surprise par le nom du port. J'ai toujours utilisé "COM1" et non "COM1:".

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Edit : Le compilateur me demande de caster le nom du port avec (LPCWSTR) ce que je fais pour que ca compile et ca s'execute mais la creation du port ne fonctionne toujours pas.

    J'ai modifier le nom du port et ca ne fonctionne toujours pas.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Il faut lancer ton logiciel sans passer par Visual C++ Express Edition, j'ai eut plein de problèmes avec le debugger de Visual pour l'ouverture de fichier, voire même sans ! Il empeche l'ouverture du port série.

    Ce code marche chez moi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    string Port;
    Port ="COM1";
    CreateFileA(				
    		Port.c_str(),                         // Choix du port « COMx » 
    		GENERIC_READ | GENERIC_WRITE, // accès pour lire et écrire sur le port 
    		0,                            // accès exclusif au port de COM 
    		NULL,                         // sécurité par défaut 
    		OPEN_EXISTING,                //Doit être à cette valeur car se n’est pas un fichier 
    		0, 
    		NULL);

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    essayer TEXT("COM1") au lieu de cet horrible cast (LPCWSTR)"COM1".

    À la rigueur, tu peux utiliser L"COM1", mais TEXT("COM1") est préférable.

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Médinoc
    essayer TEXT("COM1") au lieu de cet horrible cast (LPCWSTR)"COM1".

    À la rigueur, tu peux utiliser L"COM1", mais TEXT("COM1") est préférable.

    Et pourquoi il n'accepte pas la chaine de caractere normalement défini.
    Par contre par simple curiosité que fais le cast TEXT?

    Et Merci pour toute les réponses, c'est tres gentil de perdre un peu de temps avec moi..

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    "COM1" : char []
    LPSTR/LPCSTR : (const) char *
    L"COM1" : wchar_t *
    LPWSTR/LPCWSTR : (const) wchar_t *

    TEXT("COM1") :
    En mode normal/multi-byte, ça donnera "COM1".
    En mode Unicode, ça donnera L"COM1".


    Bref, tu compiles en mode unicode, donc le #define de CreateFile mène à CreateFileW() au lieu de CreateFileA(), donc il fallait une chaîne unicode.
    Ainsi, pour faire un programme qui compile dans les deux modes, on utilise des TCHAR, des pointeurs LPTSTR/LPCTSTR et la macro TEXT. Tous ces types sont définis dans tchar.h et windef.h pour donner une chaîne normale en mode normal, ou une chaîne unicode en mode unicode.

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Ca fonctionne parfaitement je te remercie pour t'as réponse et tes explications.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problem avec le port 8888 et GWT sous windows
    Par dialloma dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 31/03/2011, 13h45
  2. [Série] Accès au port série sous linux
    Par ghost dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 10/10/2007, 10h43
  3. [C#]Problème avec le port série sous Win98
    Par Polux63 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 29/09/2006, 09h14
  4. Réception sur le port série sous DOS avec Borland V3.0
    Par jackyjacky dans le forum Autres éditeurs
    Réponses: 24
    Dernier message: 19/03/2004, 23h18
  5. Problème avec le port série sous Windows XP
    Par didou2dek dans le forum Composants VCL
    Réponses: 6
    Dernier message: 02/09/2003, 19h50

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