j'ai besoin le composant TcomPort pour c++ builder xe3 aide mois S.V.P
j'ai besoin le composant TcomPort pour c++ builder xe3 aide mois S.V.P
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
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)"
Code : Sélectionner tout - Visualiser dans une fenêtre à part #include "CPort.hpp"
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, 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.
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) { }
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 ligneor 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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 uses Classes, Controls, StdCtrls, ExtCtrls, Forms, Messages, Graphics, Windows, CPort, CPortEsc;
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
Je n'ai pas touché à No_Dialogs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #undef SetPort // Conflit Macro Imprimante #include <CPort.hpp> #include <CPortCtl.hpp>
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
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![]()
Partager