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 :

Récupérer une classe retournée par un exe


Sujet :

C++/CLI

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Récupérer une classe retournée par un exe
    Bonjour,
    j'ai un premier programme qui contient une fonction principale


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #pragma comment(linker,"/entry:LoadingParams") 
    EParams LoadingParams(char *arg1, char *arg2)
    {
       //traitement
        EParams  aa;
     
      return ;
     
    }
    1. je souhaite appeler l’exécutable de ce programme dans un programme externe, j'ai utilisé la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void main()
    {
    execl("c:/mesdonnées/ LoadingParams.exe", "arg1", "arg2");
    }
    questions
    1) mon 1er programme doit théoriquement retourner valeur de type EParams , comment puis-je récupérer cette classe dans un programme externe. la fonction excel() retourne elle des valeurs??
    2) si ma fonction EParams LoadingParams(char *arg1, char *arg2)contient une variable de type EParams comme paramètre d'entrée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EParams LoadingParams(char *arg1,  EParams aa);
    comment peut-on appeler l’exécutable correspondant dans un programme externe??

    Merci pour toute proposition

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 072
    Points : 12 118
    Points
    12 118
    Par défaut
    Ca compile sous VS ce truc ?

    Déjà que je gueule quand des apprentis sorciers veulent transmettre des instances d'objets d'une dll à l'exécutable, vous faites encore plus fort, carrément de programme à programme.

    Comment allez-vous partager le format d'échange ?
    En copiant-collant les classes C++ d'un des programmes dans le code VB de l'autre programme ?

    Si vous voulez communiquer entre programme, utilisez l'IPC adapté.

    Le plus proche de votre "logique", serait que l'objet de type EParams soit sérailisé et envoié vers la console.

    Avec ce mécanisme, n'importe quel programme pourra dessérialiser l'objet avec les primitives de son langage (pensez à avoir un format de sérialisation qui prend en charge le multi-versionning).
    Vous pourrez lier les exécutables dans une commande pipe (|) d'un quelconque shell, ou utiliser les primitives de création de processus avec redirection des flux d'entré et de sortie standard
    Ces primitives sont spécifiques au système d'exploitation et comme votre "execl" est une antiquité signé POSIX qui n'a pas cours sous Windows et que vous êtes sur un forum C++/CLI qui est spécifique à .NET ou Mono, on est loin du POSIX.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Salut,
    Je suis sous Windows et çane compile pas je viens de vérifier
    Comment allez-vous partager le format d'échange ?
    En copiant-collant les classes C++ d'un des programmes dans le code VB de l'autre programme ?
    disons que les deux programmes contiennent pratiquement les mêmes classes et pour une raison pédagogique je dois les séparer

    Le plus proche de votre "logique", serait que l'objet de type EParams soit sérailisé et envoié vers la console.
    comment? pouvez-vous me donner plus de détails.
    Merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 072
    Points : 12 118
    Points
    12 118
    Par défaut
    disons que les deux programmes contiennent pratiquement les mêmes classes et pour une raison pédagogique je dois les séparer
    Pouvez-vous être plus explicite. Si l'on ne connait pas le motif précis de ce découpage, il est difficile de vous aider.

    "pratiquement les mêmes classes", pratiquement comment ?
    Si elles sont identiques, il suffit de les mettre dans un librairie qui sera utilisé par les 2 programmes. Une librairie C est utilisable par quasiment tous les langages. Il faut donc "dés-objectiser" l'API de ces classes (quitte à utiliser une classe template-wapper fourni dans la section hpp du fichier .h de l'API de la lib).

    Sérialiser un objet, c'est le convertir en une chaine de caractère.
    Déserialiser un objet, c'est le recréer depuis une chaine de caractère.
    Tous les moyens sont bons pour arriver à ce résultat.
    Il existe bon nombre de librairie qui implémentent ces concepts de sérialisation/déserialisation.
    Vous pouvez, si vos objets ne sont pas trop complexes et ne changent pas beaucoup, le faire sans librairie, simplement en ayant des fonctions qui convertissent ces objets en chaines de caractères et d'autres fonctions qui convertissent des chaines de caractères en instances de ces objets.

    La console est là pour faire passer ces chaines de caractère d'un processus à un autre.

  5. #5
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut
    Il faut refaire un petit cour de système d'exploitation. La plus part des OS, exécute les programme dans des espaces mémoires qui leur est propre. En gros le programme A n'as pas le droit de taper dans la mémoire du programme B.
    Après il existe des solutions pour contourner ce probleme, communément appelé "Interprocess Communication".
    Par exemple tu pourrai sérialisé ta classe dans une chaine pour la transmettre en ligne de commande à un autre programme. Le partage des code sources et lui par-contre fortement recommandé.
    ________________________________________________
    http://bliquid.fr : Blog sur Android et l'Acer Liquid

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 072
    Points : 12 118
    Points
    12 118
    Par défaut
    Le partage des code sources et lui par-contre fortement recommandé.
    NON.

    Le couplage faible est lui fortement recommandé.

    Il ne faut pas imposer des langages et des bibliothèques identiques au producteur et aux consommateurs de l'information.

    Si un consommateur utilise les mêmes technologies que le producteur, ce n'est pas le partage de code sources qu'il faut faire, mais l'utilisation d'une bibliothèque (statique ou dynamique) commune.

    Cela permet une meilleure gestion du versionning et simplifie la maintenance des composants communs.

Discussions similaires

  1. [AJAX] Récupérer une variable retournée par ajax
    Par renaud26 dans le forum jQuery
    Réponses: 7
    Dernier message: 03/07/2015, 00h00
  2. Récupérer une valeur retournée par une url externe
    Par hadakamatcho dans le forum Coldfusion
    Réponses: 2
    Dernier message: 17/10/2012, 14h17
  3. Récupérer une valeur retournée par Ajax
    Par Akazed dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 23/01/2012, 11h50
  4. Récupérer une valeur retournée par une url
    Par Math77 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 16/03/2011, 08h14
  5. Réponses: 1
    Dernier message: 13/04/2010, 10h00

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