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++/CLI Discussion :

Application modulaire en C++/CLI


Sujet :

C++/CLI

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Application modulaire en C++/CLI
    Bonjours à tous,

    Je travail actuellement sur le projet d'une application modulaire, qui pourrait charger et décharger des plug-ins à volonté…..

    J'ai trouver un exemple qui correspond exactement à ce que je veut faire, mais cette exemple est en C#...

    Je l'es donc entièrement converti, ligne après ligne, du C# au C++/CLI…

    Mais j'ai un problème avec l'instruction suivante; le programme compile, mais génère un exception : System.InvalidCastException: Impossible d'effectuer un cast d'un objet de type 'CommonTypes.AssyClass' en type 'CommonTypes.IFormAddOn'.


    En C# :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (IFormAddOnType != null)
    {
    //1 - instancier la classe
    object o = asm.CreateInstance(types[i].FullName);
    IFormAddOn formAddOn = o as IFormAddOn;
    //2 - invoker la méthode d'installation
    formAddOn.Install(form);
    foundInterface = true;
    }
    Et une fois convertie en C++/CLI :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if (IFormAddOnType != nullptr)
    {
    //1 - instancier la classe
    Object^ o = assembly->CreateInstance(types[i]->FullName);
    IFormAddOn^ formAddOn = (IFormAddOn^)o;
    // IFormAddOn^ formAddOn = safe_cast<IFormAddOn^>(o);
    // génère la meme erreur !!!
    //2 - invoker la méthode d'installation
    formAddOn->Install(form);
    foundInterface = true;
    }
    J'ai mi les sources complètes de mon projet sur le site suivant :
    http://arobasse2.free.fr/PlugIn.zip

    Merci à celui qui voudras bien m'aider, soit en trouvant une solution à mon problème, soit en m'indiquant une autre façon d'obtenir le même résultat…

    Bonne continuation à tous, @ bientôt….

    Jérémy.

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    utilise plutot la balise code stp ...

    qu'est-ce que ca donne si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IFormAddOn^ formAddOn  = (IFormAddOn^)assembly->CreateInstance(types[i]->FullName);
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Object^ o = assembly->CreateInstance(types[i]->FullName);
    IFormAddOn^ formAddOn = (IFormAddOn^)o;

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci nico pour ta réponse, mais j'ai essayer de faire un cast comme tu l'indiquai, mais celà me donne toujour la meme érreur....


    Impossible d'effectuer un cast d'un objet de type 'CommonTypes.AssyClass' en type 'CommonTypes.IFormAddOn'.

    Merci encore pour ton aide, si tu as du temps à me prèter, télécharge mon code sur le site indiqué plus haut, cela te permettra peut etre mieux de savoir ce qui ne marche pas....J'ai chercher une autre solution pour fair une application modulaire, mais je n'arrive à rien....

    PS : noyeu joel à tous.....

    jeremy

  4. #4
    Membre habitué Avatar de deeal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 218
    Points : 169
    Points
    169
    Par défaut
    j'ai essaie ton code
    je n'ai pas vraiment compris pourquoi le cast ne marche pas

    j'ai l'impression que AssyClass n'est pas defini, ou la CLR n'arrive pas a voir que AssyClass implemente l'interface IFormAddOn

    j'ai essaie de caster Directement l'object o a AssyClass, et ca ne marche pas, je pense qu'il manque peut-etre une inclusion de .h, mais e ne serait plus une architecture en plug-in.

    je suis interesse de voir la solution.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Ca fonctionne...
    Merci Deeal pour avoir passé de ton temp sur mon souci....

    j'ai trouver depuis deux jour la solution....

    Si tu regarde dans le projet en c#, il y a une dll CommonTypes.dll qui sert à stocker l'interface des plug-in...
    J'ai donc recréé un projet avec cette fois une dll comme dans l'exemple....
    Et le cast à fonctionner directement....

    Je mettrai bientot les sources de mon projet qui fonctionne, à la place des anciene source.....

    Merci encore à ceux qui m'ont aidés..

    Bonne continuation !!!

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    J'ai uploader mon projet.
    Il n'est pas fini, loing de là, mais cela pourra deja aider ceux qui le veulent

    Mon projet est à l'adresse suivante :
    http://arobasse2.free.fr/PlugIn.zip

    @++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [information] framework GUI pour application modulaire
    Par trolldom dans le forum Windows Forms
    Réponses: 1
    Dernier message: 01/11/2007, 23h40
  2. Problème de refresh dans une application modulaire
    Par TigrouMeow dans le forum Windows Forms
    Réponses: 8
    Dernier message: 11/10/2007, 15h06
  3. Réponses: 7
    Dernier message: 16/06/2007, 12h03
  4. Build / application modulaire
    Par Oscar Hiboux dans le forum Maven
    Réponses: 1
    Dernier message: 05/12/2006, 17h38
  5. Comment faire une application modulaire
    Par JuJu° dans le forum C++Builder
    Réponses: 3
    Dernier message: 04/08/2006, 11h35

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