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 :

Convertion AnsiString en TString


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2005
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 13
    Par d�faut Convertion AnsiString en TString
    Bonjour � tous,

    Pour sauvegarder la configuration d'un TComPort (Objet de CPortLib), j'ecrit les parametres dans un registre.
    Jusqu'a lors pas de PB.
    Mais pour rappeller la derniere configue par la lecture du registre, alors l�...

    La propri�t� Port du TComPort : Form1->ComPort->Port , reclame un TString, alors que la valeur sortante de mon registre est un AnsiString.
    D'o�:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    Form1->CPort1->Port=(reg->ReadString("PortRx"));
     
    donne l'erreur:
     
    [Lieur Erreur] Unresolved external '__fastcall Cport::TCustomComPort::SetPortA(const System::AnsiString)' referenced from E:\TSAII 2005\MARC\PROJET RS232\ANALYSEUR_RS232.OBJ
    Et la c'est hors connaissance pour moi...

    Could you help me, please

  2. #2
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    Par d�faut
    Je ne connais pas TComPort et n'ai pas d'aide dessus...

    mais en ce qui concerne le parametre voulu : un TString au lieu d'un String ,
    peut �tre qu'en faisant :

    ...
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    TStringList * lst = new TStringList();
    lst->Add(reg->ReadString("PortRx"));
    Form1->CPort1->Port=lst;
    ....�a peut passer si effectivement la propri�t� Port est un TString...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2005
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 13
    Par d�faut
    Merci de ton aide DJob, mais �a ne marche pas mieux...
    Cette fois je retrouve le message d'erreur:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    [C++ Erreur] Analyseur_RS232.cpp(652): E2034 Impossible de convertir 'TStringList *' en 'AnsiString'
    C'est un probl�me de transtypage...et la touche F1 n'est plus suffisante!

    Merci � toute l'aide venue,

  4. #4
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    F�vrier 2004
    Messages
    1 268
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 1 268
    Par d�faut
    Je viens de regarder l'aide de TComPort et la m�thode Port r�clame un String en Delphi.
    Or le String Delphi �gale un AnsiString en C++Builder. Je pense donc que ton erreur vient d'ailleurs...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2005
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 13
    Par d�faut
    Pour faire au plus simple, j'ai creer une nouvelle appli avec 1 bouton et un ComPort.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     
          AnsiString Port="COM1";
          Form1->ComPort1->Port=Port;
     
    }
    Et j'ai toujours le m�me message...que je ne comprend pas!

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    [Lieur Erreur] Unresolved external '__fastcall Cport::TCustomComPort::SetPortA(const System::AnsiString)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\ESSAI_RS232CBOX.OBJ

  6. #6
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    F�vrier 2004
    Messages
    1 268
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 1 268
    Par d�faut
    Tu es s�r de bien avoir install� le composant TComPort???
    cf ce tutorial.

    Si ce n'est pas �a, je ne pourrais pas beaucoup plus t'aider...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2005
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 13
    Par d�faut
    bonjour bakaneko

    La librairie est install�e via le tutorial que tu me propose. Je pense donc qu' elle est bien install�e. Je l'ai d'ailleurs install� sur mes deux PC, et c'est le m�me resultat. A n'y rien comprendre!

    Je ne ferme pas ce post pour le moment, si quelqu'un pouvait ecrire le code ci-dessus sur son PC et me rapporter ce qu'il en resulte...

    Merci � tous,

  8. #8
    Membre chevronn�

    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    531
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 531
    Par d�faut
    Il y a bien un bogue sur l'�criture directe du N� de Port (la m�thode est inaccessible).

    Moi je passe par le SetupDialog() et sauvegarde dans fichier Ini, existe de la m�me fa�on pour enregistrer/lire dans registre.

    c'est du global mais cela fonctionne.

    Donc la lecture du N� est accessible mais pas l'�criture

  9. #9
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Responsable de compte
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par d�faut
    bonsoir,
    quelle version du Composant utilise tu
    dans la version 2.64 la m�thode d'�criture du Port s'appelle
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    void __fastcall _SetPort(const AnsiString Value);

    cordialement
    vous trouverez mes tutoriels � l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les r�gles du forum

  10. #10
    Membre chevronn�

    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    531
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 531
    Par d�faut
    C'est bien �a, la m�thode est bien d�finie, mais n'est pas accessible.
    et c'est bien la 2.64

    dans Cport.hpp:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     Private:
    ....
    void __fastcall SetPort(const AnsiString Value);
    ....
    Public:
    ....
    __property AnsiString Port = {read=FPort, write=SetPort};
    ...
    Mais :
    • [C++ Erreur] Test1.cpp(27): E2247 '_fastcall TCustomComPort::SetPortA(const AnsiString)' n'est pas accessible

  11. #11
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    Par d�faut
    +1

    version 2.64 fraichement telecharg�e

    [Lieur Erreur] Unresolved external '__fastcall Cport::TCustomComPort::SetPortA(const System::AnsiString)' referenced from .....
    j'ai suivi le tutorial pourtant...

    sinon:
    SetPortA defini ANSI
    SetPortW defini UNICODE ...je crois ?

    NB :J'ai install� des composants unicodes (TNT) aussi , je sais pas si �a a un rapport...

    du coup �a m'a un peu enerv�...
    j'ai mis
    avant les includes de comport... ( c'est un peu brutal je sais.... )
    mais �a � l'air de compiler

    mais j'ai toujours pas compris pourquoi on a une distinction automatique entre ansi et unicode ....


    NB : Apparemment y'a une version 3.0 en telechargement , peut �tre qu'il n'y a plus ce probleme ....

  12. #12
    Membre chevronn�

    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    531
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 531
    Par d�faut
    J'avais pas pens� � �a.

    Cela compile et �a marche...

  13. #13
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    Par d�faut
    Je pense avoir compris d'ou vient cette fichue erreur :


    TComport utilise Windows.h qui inclu automatiquement Winspool.h
    dans lequel il y a les fonctions SetPortA et SetPortW :
    suivi d'un joli :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    #ifdef UNICODE
    #define SetPort  SetPortW
    #else
    #define SetPort  SetPortA
    Or TComport utilise aussi une fonction SetPort priv�e en interne...
    d'ou confusion pour BCB....
    Si la fonction s'appelait SetPortCom ou autre y'aurait pas eu ce probleme ..


    NB : on peut mettre aussi :
    dans le CPort.hpp ( pour eviter de le mettre � chaque fois dans l'application )

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2005
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 13
    Par d�faut
    Hello!

    Je suis ravi d'avoir soulev� votre int�r�t, mais l� vous discutez � un niveau un peu haut pour moi.
    Alors, que dois-je faire pour que:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Form1->ComPort1->Port=AnsiString  ... fonctionne
    Merci � vous

  15. #15
    Membre chevronn�

    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    531
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 531
    Par d�faut
    En r�sumer de Djob:

    ouvrir le fichier CPort.hpp, intoduire:

    juste avant les includes comme �a:

    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
     
    // Borland C++ Builder
    // Copyright (c) 1995, 2002 by Borland Software Corporation
    // All rights reserved
     
    // (DO NOT EDIT: machine generated header) 'CPort.pas' rev: 6.00
     
    #ifndef CPortHPP
    #define CPortHPP
     
    #pragma delphiheader begin
    #pragma option push -w-
    #pragma option push -Vx
    #define SetPortA SetPort     // Modif Fernand le 19/12/05 pour choix com
    #include <Registry.hpp>	// Pascal unit
    .......

  16. #16
    Membre habitu�
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Par d�faut
    Bonjour,

    Bien que ce poste commence un peu � dater, il m'a permi de r�soudre mon probl�me!!
    Je n'utilise pas CPort.h mais je cherchais juste � pouvoir appeller une fonction de l'API Win32 pour ouvrir un r�pertoire.

    Ayant un probl�me avec shlobj.h en rajoutant

    au tout d�but de mon header de l'appli principale, ca � compil� tout de suite!

    Et dire que je m'embetais � effacer sans arr�t mes *.obj apr�s une compil pour en refaire une...

  17. #17
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    D�tails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par d�faut
    Pour ceux qui ont ce probl�me avec C++Builder 2010, vous pouvez le faire d'une fa�on plus g�n�ral comme ceci:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    #ifdef UNICODE
    #define SetPortW SetPort
    #else
    #define SetPortA SetPort
    #endif // !UNICODE
    Il se peut aussi que cette ligne doive �tre supprim�e � cause d'un probl�me de d�claration multiple:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    	__fastcall EComPort(int ACode);

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2005
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 13
    Par d�faut
    Merci � tous pour votre riche participition..

    Ce forum est un v�ritable outils de travail, encore merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Convertion d'un Tableau AnsiString en double
    Par darkman13130 dans le forum C++Builder
    R�ponses: 12
    Dernier message: 27/01/2009, 21h43
  2. Convertir AnsiString en TStrings
    Par El-Diablo- dans le forum C++Builder
    R�ponses: 5
    Dernier message: 18/03/2008, 14h50
  3. Cannot convert Ansistring to char*
    Par kaizer dans le forum C++Builder
    R�ponses: 8
    Dernier message: 20/10/2006, 00h55
  4. TString en AnsiString
    Par chamamo dans le forum C++Builder
    R�ponses: 7
    Dernier message: 14/06/2006, 18h35
  5. Convertion de AnsiString en Binaire
    Par jean tof dans le forum C++Builder
    R�ponses: 3
    Dernier message: 05/03/2004, 23h58

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