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

CORBA Discussion :

Problème avec [b]struct[/b]


Sujet :

CORBA

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Problème avec [b]struct[/b]
    J’ai utilisé l’IDL suivant :

    Module operation
    {
    struct personne
    {
    string nom ;
    string prenom ;
    double age ;
    }

    interface test
    {
    personne ramener ( ) ;
    } ;
    } ;

    j’ai implémenté la fonction ramener (coté serveur ) de la façon suivante ( en Cbuilder5) :

    operation ::personne* ramener( )

    { operation ::personne* P ;

    P->nom =Edit1->Text.c_str( ) ;
    P->prenom =Edit2->Text.c_str( ) ;
    P->age =25 ;
    }

    mais malheureusement coté client je n’arrive pas à avoir les vrais valeurs des 2 Edit
    le problème ne se pose pas avec ’age’ (double).

    Si quelqu’un peut m’aider.
    Merci d’avance.

    Mon E-mai: b_abderraouf@hotmail.com

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Salut

    A ce que je vois de ton code, il y a deux petits soucils
    le premier je pense est juste que tu as oublié dans ton post l'allocation
    de P; le second est que la gestion des chaines de caracteres en CORBA est un peu plus compliqué que pour les types simples, c est a dire qu une simple affectation de pointeur ne suffit pas (tu as deja enormement de chance que ton process ne core pas, sous solaris c est un core assuré...)

    Lorsque l on a une donnée qui est en out ou en en return, il faut que l'on retourne une donnée completement alloué dans le tas et qui est à disposition du marshaller (module qui transforme la donnée en message) et qui ensuite est détruite (sinon il y aurait des fuites de mémoires).
    Ton probleme vient donc du fait que tes chaines ne sont pas dupliquées pour "operation personne"
    je profite du bout de code suivant pour repondre a ta question sur les outs

    voila un sample de code
    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
    operation ::personne* ramener( ) 
    { 
    operation ::personne_var myp = new operation::personne(); 
    myp->nom =CORBA::string_dup(Edit1->Text.c_str( )) ; 
    myp->prenom =CORBA::string_dup(Edit2->Text.c_str( )); 
    myp->age =25 ; 
    return myp._retn(); // retourne le pointeur et indique au var de ne pas detruire l objet contenu 
    } 
    
    // si tu fais ta fonction avec un parametre out:
    
    void ramener(operation ::personne_out  myp ) 
    // ou suivant le compilo idl
    void ramener(operation ::personne *&  myp ) 
    { 
    myp = new operation::personne(); 
    myp->nom =CORBA::string_dup(Edit1->Text.c_str( )) ; 
    myp->prenom =CORBA::string_dup(Edit2->Text.c_str( )); 
    myp->age =25 ; 
    }
    Il ne faut pas confondre vitesse et precipitation....

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Salut

    merci pour la réponse,

    ça a marché très bien quand j ai utilisé la fect:

    operation ::personne* ramener( )

    quant à OUT (coté client), j ai utilisé le code suivant:

    char* temp;
    operation::personne* myp;

    myp = new operation::personne();

    serveur->ramener( myp );

    temp=myp->nom ;
    Edit1->Text=temp;

    temp=myp->prenom;
    Edit2->Text=temp;

    Edit1->Text=myp->age ;

    Mais ça n a pas marché.
    Est-ce que tu peux m aider?
    Merci d avance

Discussions similaires

  1. Problème avec un struct et uint_32_t
    Par esteban dans le forum C++
    Réponses: 14
    Dernier message: 02/11/2010, 22h11
  2. Problème avec realloc et struct
    Par _SamSoft_ dans le forum Bibliothèque standard
    Réponses: 38
    Dernier message: 27/12/2007, 10h13
  3. Réponses: 22
    Dernier message: 29/01/2005, 11h29
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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