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 :

TcomPort pour c++ builder xe3


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Par défaut TcomPort pour c++ builder xe3
    j'ai besoin le composant TcomPort pour c++ builder xe3 aide mois S.V.P

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 053
    Par défaut
    Tu pourrais être plus précis !
    Il y plein de sujet pour l'installation du TComPort de Dejan Crnila même si je considère que l'installation de composant non-visuel n'a que très peu d'intéret

    J'ai utilisé TComPort 411f en XE2, je ne l'ai pas installé, j'ai juste ajouté les 5 PAS au projet, cela génère les HPP (je crois qu'il n'est plus nécessaire de les modifier contrairement en 2007)

    Ensuite, cela fonctionne très bien, plus de soucis de package a déployer avant,

    Je pense qu'en XE3, la méthode est valable
    Tient un extrait d'un mini projet devant utiliser le COM

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
        if ( ! FComPort)
        {      FComPort = new TComPort(NULL);
     
          TComDataPacket *TmpComDataPacket = new TComDataPacket(FComPort);
          TmpComDataPacket->ComPort = FComPort;
          TmpComDataPacket->StartString = (char)02;
          TmpComDataPacket->StopString = (char)0x0d;
          TmpComDataPacket->IncludeStrings = true;
          TmpComDataPacket->OnPacket = ComDataPacketEventHandler;
     
          TComLed *TmpComLed = new TComLed(FComPort);
          TmpComLed->ComPort = FComPort;
          TmpComLed->LedSignal = lsConn;
          TmpComLed->Left = ImageConnected->Left + ImageConnected->Width;
          TmpComLed->Top = ImageConnected->Top;
          TmpComLed->Parent = GroupBoxComSelector;
          TmpComLed->Visible = true;
     
          LabelComLedLegend->Top = TmpComLed->Top + TmpComLed->Height + 2;
          LabelComLedLegend->Left = TmpComLed->Left;
     
          TmpComLed = new TComLed(FComPort);
          TmpComLed->ComPort = FComPort;
          TmpComLed->LedSignal = lsRx;
          TmpComLed->Left = ImageConnected->Left + ImageConnected->Width + TmpComLed->Width;
          TmpComLed->Top = ImageConnected->Top;
          TmpComLed->Parent = GroupBoxComSelector;
          TmpComLed->Visible = true;
     
          TmpComLed = new TComLed(FComPort);
          TmpComLed->ComPort = FComPort;
          TmpComLed->LedSignal = lsTx;
          TmpComLed->Left = ImageConnected->Left + ImageConnected->Width + (2 * TmpComLed->Width);
          TmpComLed->Top = ImageConnected->Top;
          TmpComLed->Parent = GroupBoxComSelector;  
          TmpComLed->Visible = true;
     
          FComTerminal = new TComTerminal(FComPort);
          FComTerminal->ComPort = FComPort;
          FComTerminal->Emulation = teNone;
          FComTerminal->LocalEcho = true;
          FComTerminal->AppendLF = true;
          FComTerminal->ClearScreen();
     
          FComTerminal->Align = alClient;
          FComTerminal->Parent = TabSheetTerminal;
          FComTerminal->Visible = true;
        }
     
        FComPort->Port = cbxPortComSelector->Items->Strings[cbxPortComSelector->ItemIndex];
     
        if (RadioGroupComProtocol->ItemIndex == 0)
        {
          FComPort->BaudRate = br9600;
          FComPort->DataBits = dbSeven;
          FComPort->Parity->Bits = prEven;
          FComPort->StopBits = sbOneStopBit;
        }
        else
        {
          FComPort->BaudRate = br19200;
          FComPort->DataBits = dbEight;
          FComPort->Parity->Bits = prNone;
          FComPort->StopBits = sbOneStopBit;
        }
        FComPort->Open();
    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 éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 74
    Par défaut
    Bonjour,

    Est-ce que Mr ShaiLeTroll pourrait-être plus précis, je voudrais aussi utiliser le TComPort avec C++Builder Xe2 (ou xe3 si la méthode fonctionne aussi), j'ai l'habitude de l'utiliser avec Delphi mais là je n'arrive pas à compiler.

    En commençant par suivre ta méthode, j'ai ajouté l'unité "CPort.pas" (j'ai mis à jour le compo avec la version 4.11f aussi) à mon projet (j'ai fait un nouveau projet test Appli Fiche C++Builder avec juste un form avec un bouton et un mémo, juste déjà pour lister les ports coms actifs)

    Au premier essaie de make, j'ai obtenu fichier CPortSetup manquant, j'ai donc mis No_Dialogs en option de compil pour ne pas avoir à lier ce fichier en plus (dont à priori je n'ai pas besoin),
    au second make la compil me génère bien un fichier Cport.hpp (dans le dossier où se trouve CPort.pas) et j'ai dû ajouté au début du code du form; mais à la compil j'obtiens plusieurs erreurs de compil dans CPort.hpp de type "Déclaration multiple pour "_fastcall EComPort::EComPort(int)"

    Sais-tu comment résoudre cette erreur proprement ? Ou pourrais-tu m'expliquer ta méthode de liaison des fichiers pour ne pas avoir cette erreur ? D'ailleurs, quels sont les 4 autres fichiers .pas que tu ajoutes à ton projet ?

    ----
    J'ai essayé d'aller plus loin, en mettant les deux lignes en commentaires dans Cport.hpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public:
    	/* Exception.CreateFmt */ inline __fastcall EComPort(const System::UnicodeString Msg, System::TVarRec const *Args, const int Args_Size) : System::Sysutils::Exception(Msg, Args, Args_Size) { }
    //	/* Exception.CreateRes */ inline __fastcall EComPort(int Ident)/* overload */ : System::Sysutils::Exception(Ident) { }
    	/* Exception.CreateResFmt */ inline __fastcall EComPort(int Ident, System::TVarRec const *Args, const int Args_Size)/* overload */ : System::Sysutils::Exception(Ident, Args, Args_Size) { }
    	/* Exception.CreateHelp */ inline __fastcall EComPort(const System::UnicodeString Msg, int AHelpContext) : System::Sysutils::Exception(Msg, AHelpContext) { }
    	/* Exception.CreateFmtHelp */ inline __fastcall EComPort(const System::UnicodeString Msg, System::TVarRec const *Args, const int Args_Size, int AHelpContext) : System::Sysutils::Exception(Msg, Args, Args_Size, AHelpContext) { }
    //	/* Exception.CreateResHelp */ inline __fastcall EComPort(int Ident, int AHelpContext)/* overload */ : System::Sysutils::Exception(Ident, AHelpContext) { }
    	/* Exception.CreateResFmtHelp */ inline __fastcall EComPort(System::PResStringRec ResStringRec, System::TVarRec const *Args, const int Args_Size, int AHelpContext)/* overload */ : System::Sysutils::Exception(ResStringRec, Args, Args_Size, AHelpContext) { }
    	/* Exception.Destroy */ inline __fastcall virtual ~EComPort(void) { }
    , le projet compile et je peux faire appel à EnumComPorts qui fonctionne correctement; cependant je ne suis pas sûr qu'il soit complétement correct d'enlever ces deux lignes.

    Pour aller plus loin et tester ton code (et aussi pouvoir utiliser les TComComboBox et TComLed), j'ai évidemment ajouté CPortCtl.pas au projet mais là ....... je n'obtiens pas de CPortCtl.hpp et le compil me donne l'erreur "Fichier introuvable Cport.dcu" sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    uses
      Classes, Controls, StdCtrls, ExtCtrls, Forms,
      Messages, Graphics, Windows, CPort, CPortEsc;
    or il y en a bien un dans ..\Win32\Debug (ainsi que CPortEsc.dcu même si le .pas n'a pas été ajouté au projet); je trouverai ça étonnant d'avoir à ajouté au chemin d'inclusion du projet le répertoire de sortie des fichiers ..\Win32\Debug ... alors que faire ?? merci

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 053
    Par défaut
    Pour EComPort, je n'ai pas mis celle-ci en commentaire mais les 2 autres mais l'idée reste la même

    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
    public:
    //	__fastcall EComPort(int ACode, int AWinCode);
    //	__fastcall EComPort(int ACode);
    	__property int WinCode = {read=FWinCode, write=FWinCode, nodefault};
    	__property int Code = {read=FCode, write=FCode, nodefault};
    public:
    	#pragma option push -w-inl
    	/* Exception.CreateFmt */ inline __fastcall EComPort(const AnsiString Msg, System::TVarRec const * Args, const int Args_Size) : Sysutils::Exception(Msg, Args, Args_Size) { }
    	#pragma option pop
    	#pragma option push -w-inl
    	/* Exception.CreateRes */ inline __fastcall EComPort(int Ident)/* overload */ : Sysutils::Exception(Ident) { }
    	#pragma option pop
    	#pragma option push -w-inl
    	/* Exception.CreateResFmt */ inline __fastcall EComPort(int Ident, System::TVarRec const * Args, const int Args_Size)/* overload */ : Sysutils::Exception(Ident, Args, Args_Size) { }
    ...

    Pour les problèmes de DCU, veille à inclure les fichiers à changer l'ordre de compilation (clic droit sur le projet)

    J'ai regardé mon projet

    Code cbproj : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CppCompile "MonForm.cpp" - BuildOrder 2    
    DelphiCompile ".....CPort.pas" - BuildOrder 3
    DelphiCompile ".....CPortCtl.pas" - BuildOrder 5
    Include ".....CPort.hpp"> - BuildOrder 4
    Include ".....CPortCtl.hpp"> - BuildOrder 6

    Mais étrange, j'ai dans mon output bin j'ai CPort.obj, CPortCtl.obj, CPortEsc.obj, CPortSetup.obj et CPortTrmSet.obj

    Pour les chemins d'inclusion, je suis Delphiste à la base, disons que j'ajoutes tout comme un barbare,

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        <ILINK_ObjectSearchPath>C:\Production\Projects\Utilitaires\PortCom\MonProjet;src\ihm;src\lib\comport411f\Source</ILINK_ObjectSearchPath>
     
        <IncludePath>$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;C:\Production\Projects\Utilitaires\PortCom\MonProjet;src\ihm;src\lib\comport411f\Source</IncludePath>
     
        <ILINK_LibraryPath>$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;C:\Production\Projects\Utilitaires\PortCom\MonProjet;src\ihm;src\lib\comport411f\Source</ILINK_LibraryPath>

    au début de mon fichier MonForm.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #undef SetPort // Conflit Macro Imprimante
    #include <CPort.hpp>
    #include <CPortCtl.hpp>
    Je n'ai pas touché à No_Dialogs
    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

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 74
    Par défaut
    Merci beaucoup pour cette réponse complète et rapide, je teste ça ce soir voir si ça me permet de compiler correctement; encore merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/02/2008, 10h28
  2. Installation UIB pour BC++ Builder
    Par Stouille89 dans le forum C++Builder
    Réponses: 1
    Dernier message: 07/01/2008, 08h15
  3. JEG : jAPI : Une API pour C++Builder
    Par JEG dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/11/2003, 13h50

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