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 :

Inclusion de fichiers en IDL


Sujet :

CORBA

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Inclusion de fichiers en IDL
    Bonjour,
    Ma question peut paraître saugrenue mais s'il existe une solution, cela m'éviterait de nombreuses heures de copier-coller.

    Voilà, je partage des énumérations 'enum' et des structures 'struct' avec d'autres programmes. L'idée qui est actuellement développée est de faire des 'copier-coller' dans le fichier IDL du contenu des fichiers H.

    J'ai essayé de faire des "include"; à la compilation du fichier IDL, il n'y a pas d'erreur mais le compilateur me traduit le nom de mon fichier inclus en nom de fichier skeleton ( qui n'a pas été généré et donc me mène à une erreur lorsque je souhaite compiler le code client ou serveur ). De plus, il ne "convertit" pas les types des variables internes, par exemple d'une structure, en type CORBA.

    De plus, soyons ouff jusqu'au bout.......... Ces structures et énumérations sont à l'intérieur de définition de modules.

    Pour résumé finalement, est-il possible de dire au compilateur d'insérer le code d'un fichier H dans le fichier IDL avant de créer les fichiers squelettes ???

    Je vous en serai reconnaissante à vie si vous pouviez me dépanner. A moi les longues heures de gagnées à dormir sur la plage !!!!!!!!!!!!!

    Merci quand même de compatir à ma souffrance si vous n'avez pas d'idée.....

    Babou

  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
    Bonjour Babou

    Si tes fichiers ne contiennent que des enums et des structures c'est tout a fait possible:

    Tu places tes definitions d'enum et de structure dans un fichier.idl
    pour ce fichier tu ne fais générer que la partie cliente à ton compilo IDL, de toute façon le serveur sera vide.

    Ensuite, tu auras le headers qui contiendra la meme chose que ton header non CORBA, et le .cpp contiendra notamment les fonctions de marshalling et unmarshalling.

    deuxieme manip, il faut que tu decoupes ton header actuel en deux:
    partie 1: partie pur C,C++ contenant tes structs et enums
    partie 2: le reste

    Tu inclus a l endroit de la partie 1 un fichier .h qui dans le cas ou tu utilises CORBA, inclus ton .h généré, et dans le cas ou tu n utilises pas CORBA il inclus un fichier contenant la partie 1.

    Avant tout, il faut que tu verifies le mapping de ton compilo: struct -> class (cas a probleme) ou struct -> struct.
    dans le cas du mapping struct -> class, il faut que tu verifies que ton code compile bien si tu remplaces struct en class, normalement tu n as pas de soucis sauf s il y a des typedef struct , ou struct A a; qui trainent.

    Si tes modules sont implémentés sous forme de nested class et non de namespace, cela peu poser des problemes...

    J espere que je me suis fais comprendre ...
    Bon courage et bonne plage 8)

    Ludo
    Il ne faut pas confondre vitesse et precipitation....

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse, je vais pouvoir aller dormir....................
    Babou

  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Inclusion multiple de fichiers
    bonjour,

    Je n'arrive pas à comprendre d'où peut provenir l'erreur.

    J'ai créé un fichier IDL qui contient toutes les énumérations ( 'Enum.idl' ), un autre qui contient toutes les structures 'Struct.idl' ( le premier fichier est inclus dans ce deuxième fichier puisque certaines variables des structures sont d'un type énuméré ) et un troisième fichier 'Periode.idl' qui regroupe les deux premiers et sert réellement d'interface IDL.

    Lorsque je compile les deux premiers fichiers, il n'y a aucune erreur mais lorsque je souhaite faire de même avec le troisième, voici le message que j'obtiens :
    "In file included from ..\IDL\periode.idl:9:
    ..\Sources\Struct.idl:19: ..\Sources\Enum.idl: Invalid argument


    Si j'enlève l'inclusion dans Struct.idl, je peux compiler le 3ème fichier, par contre si je souhaite recompiler Struct.idl, bien évidemment, il rouspète sur les variables de type énuméré. On dirait que mon compilateur ORB ne peut pas accéder au second degré d'inclusion ?? Avez-vous des renseignements à ce propos ??! Mais en C++, on peut inclure les points H plusieurs fois, pourquoi pas là ?
    De même, si on reste logique( logique C++ ), le fait d'inclure Enum.idl dans Struct.idl et ensuite d'inclure seulement 'Struct.idl' dans 'Periode.idl', dans ce dernier fichier, je peux utiliser des variables de type énuméré. Pourtant là, j'ai toujours le même erreur que précédemment. J'ai essayé de trouver une option de compilation. Mais il n'en parle nul part.

    Merci de m'aider si vous avez déjà rencontré ce problème ou si vous n'êtes pas d'accord avec ma logique, de me la redresser cette fichue logique.

    Bonne journée et j'envie ceux qui sont dans la piscine par cette chaleur !!!!!!


    E

  5. #5
    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 Babou

    Dans tes fichiers idls as tu mis comme en C/C++
    #ifndef __monmodule__idl
    #define __monmodule__idl

    #endif

    Ensuite quel orb utilises tu ?
    car dans beaucoup d ORB il faut spécifier au compilateur IDL de generer
    le code pour les fichiers d inclusion, notamment avec Visibroker !

    Si ces deux points ne corrigent pas ton probleme peux tu joindre une version courte de tes idls qui reproduisent ton probleme ainsi que les references de ton compilo IDLs.

    a bientot


    8)
    Il ne faut pas confondre vitesse et precipitation....

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 10
    Points : 6
    Points
    6
    Par défaut [Suite]Inclusion multiple de fichiers
    Salut,
    Merci tout d'abord de t'intéresser à mon problème.

    Effectivement, comme en C/C++, j'ai bien mis
    #ifndef __monmodule_IDL
    #define __monmodule_IDL
    dans chaque fichier IDL.

    De plus, j'utilise l'ORB OmniORB et il ne semble pas y avoir d'option pour compiler les fichiers inclus. Ce que je fais, je construis séparément chaque IDL et cela ne pose pas de problème tant qu'il n'y a pas d'inclusion dans un fichier IDL inclus dans un autre. En clair, voici les trois fichiers simplifiés :
    /////////////////////////////////////////////////////////////////////////////////
    // Enum.idl
    #ifndef __ENUM_IDL
    #define __ENUM_IDL

    enum Mois {
    Janvier, Fevrier, Mars, Avril, Mai, Juin, Juillet,
    Aout, Septembre, Octobre, Novembre, Decembre, Undefined
    };
    #endif
    ///////////////////////////////////////////////////////////////////////////////
    // Struct.idl
    #ifndef __STRUCT_IDL
    #define __STRUCT_IDL

    #include "C:\CMA5000\Dev\Java_C++\DLL_Borland\Sources\Enum.idl"

    typedef string Jour;
    typedef unsigned short NumberDay;
    typedef long Annee;

    struct sTime {
    Jour name_jour;
    NumberDay le_jour;
    Mois le_mois;
    Annee l_annee;
    };
    #endif // _STRUCT_IDL_
    //////////////////////////////////////////////////////////////////////////////////
    // Periode.idl
    #ifndef __PERIODE_IDL
    #define __PERIODE_IDL

    #include "C:\CMA5000\Dev\Java_C++\DLL_Borland\Sources\Enum.idl"
    #include "C:\CMA5000\Dev\Java_C++\DLL_Borland\Sources\Struct.idl"

    module Periode
    {
    typedef sequence<Mois> DesMois;

    interface Traitement {
    sTime aujourdhuiDate();
    };
    };
    //////////////////////////////////////////////////////////////////////////////////
    Et à la compilation de ce dernier fichier, j'ai l'erreur :

    Performing Custom Build Step on ..\IDL\periode.idl
    In file included from ..\IDL\periode.idl:9:
    C:\CMA5000\Dev\Java_C++\DLL_Borland\Sources\Struct.idl:10: C:\CMA5000\Dev\Java_C++\DLL_Borland\Sources\Enum.idl: Invalid argument
    omniidl: Error running preprocessor
    Error executing c:\winnt\system32\cmd.exe.


    Et je me prends la tête :
    J'ai bien essayé de ne pas indiquer les chemins en dur ou du moins de tout mettre dans le même répertoire, mais rien n'y fait. Par la même occasion, sais-tu s'il est possible de ne pas indiquer le chemin en dur ?? J'ai eu beau essayer de faire fonctionner le peu de neurones que j'ai mais je ne dois pas en avoir assez pour trouver la solution.

    N'hésitez pas à faire partager toute idée, je testerai sans problème. Merci

  7. #7
    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 babou

    Alors premier point, je te propose d essayer de renommer tes fichiers
    en effet, les compilo idl ne sont pas case sensitive, et je pense que le
    compilo idl interprete ton Struct comme une structure et donc bien evidemment l argument est invalide.
    essaie de renommer tes fichier struct et enum

    pour les inclusions , si tu ne veux pas passer le chemin complet , l option -I que tu peux utiliser plusieurs fois te permet de mettre des repertoires de recherche pour les fichiers

    si le probleme persiste essaie de passer -E au compilo pour qu il ne fasse que le preprocessing afin de voir si le probleme vient du preprocessing ou bien du compilo idl lui meme

    J espere que ca va aller
    Ludo
    Il ne faut pas confondre vitesse et precipitation....

  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 10
    Points : 6
    Points
    6
    Par défaut


    Dommage, mais j'ai essayé avec empressement ta solution de renommer mes fichiers, me traitant de tous les noms. Je les ai pourtant renommé 'toto' et 'tata' ( aucun mot défini en C++ ainsi il me semble !! ), rien n'y a fait...... Sniff!!!

    De même, j'ai déjà essayé l'option -I en lui indiquant le chemin mais le compilo n'arrêtait pas de me dire que le fichier était introuvable alors que c'était un copier-coller ( pas de faute dans la recopie possible ). Faut-il coller le chemin au -I, mettre des doubles ou simples quotes ???

    Alors si tu as d'autres idées ???

    Babou

  9. #9
    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 Babou

    J ai essayé avec TAO et le contenu de tes fichiers
    En gros a part un #endif qui manque a la fin de period.idl
    mais qui doit etre une erreur de copier coller
    cela fonctionne tres bien chez moi ....

    en gros pour la syntaxe des includes
    #include <toto.idl>

    sur la ligne de commande -Ic:\monchemin
    Il ne faut pas confondre vitesse et precipitation....

  10. #10
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 10
    Points : 6
    Points
    6
    Par défaut [RESOLU]Inclusion des fichiers

    Mille merci pour ton aide.

    Il fallait deviner que le message d'erreur voulait dire qu'il n'aimait pas les chemins en dur !!!
    Pour avoir un code plus clean, j'ai ajouté l'option -I ( eh! oui, j'ai enfin réussi ) et par la même occasion, le problème s'est volatilisé.

    J'hésiterai pas à boire un verre de champagne à ta santé. Encore mille merci !!!



    A +
    Babou

  11. #11
    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
    Je viens de regarder une doc sur omniorb
    et comme il est fait pour fonctionner avec cygwin
    ton probleme doit venir du fait que tu lui mets des chemins a la windows
    et non a la unix..
    En tous les cas, je suis vien content que ca marche
    A+
    Il ne faut pas confondre vitesse et precipitation....

Discussions similaires

  1. Inclusion de fichiers et portée d'une constante
    Par Djakisback dans le forum C
    Réponses: 14
    Dernier message: 13/05/2005, 13h19
  2. [debutant]inclusion de fichier .js !!!
    Par christophebmx dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/01/2005, 14h16
  3. [Inclusion des fichiers] hierarchie
    Par Casp dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 09/07/2004, 12h43
  4. XML Schema et inclusions de fichiers XML
    Par monk31 dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 08/10/2003, 14h17
  5. Inclusion de fichier .h
    Par Tony49 dans le forum C++Builder
    Réponses: 2
    Dernier message: 06/11/2002, 11h10

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