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# Discussion :

Charger un exe dynamiquement comme on le ferait pour une DLL => possible? [Fait]


Sujet :

C#

  1. #1
    Membre actif
    Avatar de Fabien Henon
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur indépendant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 226
    Points
    226
    Par défaut Charger un exe dynamiquement comme on le ferait pour une DLL => possible?
    Bonjour à tous,

    Alors voilà, j'ai fait un programme en C++ (il s'agit d'un petit éditeur).
    Quand je lance ce programme par son exe il lance l'éditeur, récupère les infos et fait ce qu'il faut.
    Et en fait j'aimerais faire un autre editeur plus gros en C# cette fois (pour des raisons de simplicité), et j'aimerais dans cet éditeur pouvoir lancer l'exe C++ et récupérer quelques infos (sur la map crée). Et donc je me demandais s'il était possible de charger dynamiquement un exe avec un assembly comme on le ferait avec une DLL, et lancer une fonction bien précise dans cet exe?

    D'ailleurs je me pose aussi une petite question entre 2: admettons que ce ne soit pas un exe C++ que j'ai mais une DLL C++ (je travaille en C++ non managé), est-ce que je pourrais quand meme charger cette DLL dynamiquement dans du code C# pour lancer une fonction précise? (bien sur je ne parle pas d'un chargement via un referencement au projet, mais bien d'un chargement dynamique avec la class Assembly du C#)

    Merci d'avance de vos réponses.

  2. #2
    Membre habitué Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Points : 131
    Points
    131
    Par défaut
    est-ce que je pourrais quand meme charger cette DLL dynamiquement dans du code C# pour lancer une fonction précise?
    Oui c'est possible, le framework .NET gère la communication entre monde managé et monde natif grâce à un API nommé marshalling.

    Voici un tuto très bien fait qui t'indiquera la procédure à suivre : http://morpheus.developpez.com/dlldotnet/.

  3. #3
    Membre actif
    Avatar de Fabien Henon
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur indépendant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 226
    Points
    226
    Par défaut
    Merci pour ta réponse, cet article m'aide pour le chargement et le lancement de fonctions venant de DLL

    Par contre est-ce faisable avec un executable?
    Et aussi est-ce que ca marcherait aussi en passant par un assembly et en faisant un LoadFromFile(...), GetTypes(), Invoke(...) ?

  4. #4
    Membre habitué Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Points : 131
    Points
    131
    Par défaut
    De ma maigre expérience, je ne crois pas qu'on puisse appeler des méthodes d'un exécutable sans passer par le chemin "normal" d'exécution. Cette structure ne doit pas être prévue pour (contrairement aux DLLs).

    Par contre, tu pourrais exécuter ton .exe dans ton code de ton programme .NET, stocker le résultat de ton .exe dans un fichier plat et lire le fichier plat avec ton programme .NET pour exploiter les données en output...

    Après ce n'est qu'une idée!! :p

  5. #5
    Membre actif
    Avatar de Fabien Henon
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur indépendant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 226
    Points
    226
    Par défaut
    Ok je vois. C'est dommage mais je m'en doutais un peu. En fait je voulais faire ça pour justement éviter d'écrire mes données dans un fichier ^^ . Mais dans ce cas, au lieu d'avoir un executable je vais plutot faire une DLL vu qu'au moins je suis sûr que ce sera bon de cette manière

    Par contre est-ce que tu pourrais me dire (toi ou quelqu'un d'autre bien sûr ), si le chargement d'une DLL C++ non managé pourrait aussi être chargé dynamiquement avec un assembly (et les fonction LoadFromFile, GetTypes, Invoket, ...) ? (je demande ca par simple curiosité vu que tu m'as présenté une autre méthode qui m'a l'air très bien )

  6. #6
    Membre habitué Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Points : 131
    Points
    131
    Par défaut
    De ce que j'ai pu voir dans les différentes documentation pour l'intégration de ma DLL native, il n'existe pas de mécanisme pour charger les fonctions d'une DLL native et ensuite les utiliser directement dans ton code (si c'est cela le propre de ta question).

    Afin d'établir une communication entre le mode natif et le monde managé, tu es forcé de passer par une translation de typage qui est fait par l'API de marshalling du framework .NET et par le mécanisme du wrapper.

  7. #7
    Membre actif
    Avatar de Fabien Henon
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur indépendant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 226
    Points
    226
    Par défaut
    D'accord merci de ta réponse, j'y vois plus clair

    Voilà donc qui clos ce topic, merci de ton aide

  8. #8
    Membre habitué Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Points : 131
    Points
    131
    Par défaut
    Avec plaisir, on m'a beaucoup aidé sur ce forum alors j'essaie d'en faire autant.

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

Discussions similaires

  1. [XL-2010] Utilisation du bouton Annuler de inputbox comme sortie d'instruction pour une date
    Par will-1981 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/09/2014, 09h46
  2. Charger un exe comme une dll
    Par atapi dans le forum Langage
    Réponses: 6
    Dernier message: 08/10/2011, 15h06
  3. Réponses: 3
    Dernier message: 17/07/2007, 10h15
  4. Creation dynamique d'elements de menu avec une DLL
    Par Sunchaser dans le forum C++Builder
    Réponses: 5
    Dernier message: 14/12/2005, 21h52
  5. [FLASH MX] Charger un swf dynamiquement
    Par Toutouffe dans le forum Flash
    Réponses: 3
    Dernier message: 24/01/2005, 01h19

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