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

Windows Discussion :

Appeler une méthode de DLL


Sujet :

Windows

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut Appeler une méthode de DLL
    Bonjour,

    J'aurais besoin de créer un service windows.
    Je vais pour cela utiliser la commande sc.exe.

    Je dois donc créer un exe qui sera executé par mon service (si j'ai bien compris).

    Or je dois dans cet exe faire appel à plusieurs méthodes qui se trouvent dans une dll (écrite en C#). Comment faut-il faire ca ? Auriez-vous un exemple de syntaxe d'appel ?

    Merci d'avance !

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si tu ne sais pas appeler une fonction d'une DLL (deux façons possibles pour une DLL normale, une seule façon pour appeler une DLL .Net depuis un exe .Net, et encore une autre façon pour appeler une DLL .Net depuis un exe normal), je ne suis pas sûr qu'il soit temps de t'attaquer aux services.

    Surtout si tu postes ton thread dans script/batch, alors qu'un service n'est ni l'un ni l'autre; c'est forcément un exe...

    Déjà, ton programme, sera-ce un programme normal ou .Net ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut
    Yep, je sais que ca sera un exe (d'ailleurs c'est précisé dans mon message précédent).
    J'ai posté ici parce que je n'ai pas trouvé de forum plus approprié. S'il y en a un, je prends...

    Je suis plutot codeur pour appli web, et si je me tourne vers la création de service, c'est que je n'ai pas trop d'autre solution : /

    D'habitude, dans mon appli, j'ai un script JScript qui parse une table SQL, puis qui génère des XML. J'appelle ensuite une méthode d'une dll C# (je ne l'ai pas écrite, je me contente de l'appeler) qui va envoyer ces XML vers Biztalk. Ce script était lancé manuellement, et il doit maintenant s'executer en continu, et parser continuellement ma table.
    La création d'un service m'a donc paru être la solution la plus élégante. Je sais, dans mon exe, executer mes commande sql et générer les XML, ca marche, par contre je suis bloqué pour l'appel de la méthode C#.

    Voila la problématique. Je suis ouvert à toute suggestion.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si la DLL C# n'est pas Com-Visible, impossible de l'appeler directement depuis un programme natif.
    Par contre, tu devrais pouvoir l'appeler facilement depuis un programme .Net. VB, C#, C++CLI... Le choix de langages est grand.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Si à partir d'un exe compilé natif on veut appeler une dll .NET regarder sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BOOL STDMETHODCALLTYPE _CorDllMain(
      HINSTANCE hInst,
      DWORD dwReason,
      LPVOID lpReserved
    )
    Instructs the Windows loader to look for the entry point in the DLL image, which must be named DllMain. In Windows XP or later, this function is called directly by the operating system loader. In versions of Windows earlier than Windows XP, it is called indirectly through a fixup in the loader.

    Header file: Include Mscoree.h.
    Library: link Link with Mscoree.lib.
    J'ai trouvé cela dans le MSDN dis nous si cela fonctionne

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut
    Merci beaucoup !
    Je vais regarder ca demain !
    Tu aurais le lien direct ?

    En dehors de ca, est ce que le type de problématique évoquée au dessus vous parle ? Pensez vous que la création d'un service n'est pas une bonne solution ?

  7. #7
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Salut Nox75 regarder ici
    http://msdn.microsoft.com/en-us/library/9yk0t8cf.aspx
    Sinon pour la création d'un service oui si c'est un exe qui doit tourner constament en tache de fond

  8. #8
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    Si à partir d'un exe compilé natif on veut appeler une dll .NET regarder sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BOOL STDMETHODCALLTYPE _CorDllMain(
      HINSTANCE hInst,
      DWORD dwReason,
      LPVOID lpReserved
    )
    J'ai trouvé cela dans le MSDN dis nous si cela fonctionne
    Citation Envoyé par Mat.M Voir le message
    La MSDN c'est bien mais trop de MSDN tue la MSDN. Tu n'as jamais appelé une dll .NET à partir d'un programme natif ...

    C'est bien plus compliqué d'appeler proprement du code managé à partir d'une application purement native et c'est pas en utilisant _CorDllMain qu'on peut le faire. Il faut utiliser l'interface ICorRuntimeHost :
    http://msdn.microsoft.com/en-us/library/ms164320.aspx
    http://www.codeproject.com/KB/COM/simpleclrhost.aspx
    http://69.10.233.10/KB/cs/unmanagedtomanaged.aspx

    Ce n'est pas le seul moyen d'appeler du code mangé à partir d'un code natif mais c'est le plus propre en dehors de l'utilisation de COM.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Mais même ça, c'est déjà utiliser COM, donc autant faire directement une assembly COM-Visible, ce sera moins se compliquer la vie...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Oui tu as raison, mais pour rendre une assembly COM-Visible il faut pouvoir la modifier et tout, définir les guids, etc alors que ce n'est pas lui qui code la dll a priori. Mais c'est sur, c'est plus rentable (même s'il faut aller jusqu'à créer une autre dll en C# pour utiliser la première et exposer la seconde au COM).

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/08/2011, 14h10
  2. [POO]Appelé une méthode d'une classe mère
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 14/12/2005, 14h44
  3. Réponses: 2
    Dernier message: 31/08/2005, 16h12
  4. Appeler une méthode dynamiquement
    Par doof dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/01/2005, 23h15
  5. Comment l'appel à une méthode virtuelle....
    Par Blobette dans le forum C++
    Réponses: 7
    Dernier message: 07/12/2004, 13h55

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