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

VB.NET Discussion :

Utiliser un DLL VB.NET dans du C++ non manage


Sujet :

VB.NET

  1. #1
    En attente de confirmation mail
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Points : 11
    Points
    11
    Par défaut Utiliser un DLL VB.NET dans du C++ non manage
    Bonjour,

    Dans le cadre de mon travail je suis amene dans du code C++ non manage a appeler une DLL compilee via VB.NET.
    Pour l'instant tout fonctionne bien, en sachant que cette fameuse DLL est une DLL COM.
    Cependant on m'a demande s'il etait possible de rendre cette DLL NON COM et de toujours l'utiliser dans mon code C++ non manage, pour des raisons de deploiement (pour eviter l'enregistrement de la DLL COM a chaque nouvelle release).

    J'ai cherche sur le forum, sur le net, sans succes pour l'instant

    Quelqu'un aurait-il ne serait-ce qu'une vague idee, une piste que je pourrais exploiter ? Si ce n'est pas possible soit, aucun pobleme, mais je dois juste le savoir :p

    Merci d'avance !

  2. #2
    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 Guyzeug Voir le message
    Cependant on m'a demande s'il etait possible de rendre cette DLL NON COM et de toujours l'utiliser dans mon code C++ non manage, pour des raisons de deploiement (pour eviter l'enregistrement de la DLL COM a chaque nouvelle release).
    Je me souvient bien qu'il y avais moyen d'exporter des fonctions directement à partir de l'il mais c'était une solution très peut fiable.
    Je dirait donc non. Soit tu fais du C++/CLI et dans ce cas tu peut utiliser la dll managée comme une assembly, soit tu passe par COM, soit tu charges le CLR manuellement à partir du programme C++ natif mais je ne pense pas que le jeu en vaille la chandelle ( c'est assez chaud à réaliser ) .... Je ne crois pas qu'il y ai un autre moyen ...

  3. #3
    En attente de confirmation mail
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Merci pour ta reponse smiley

    Je t'avoue que je ne suis pas sur d'avoir parfaitement compris ta reponse, non pas qu'elle ne soit pas claire, mais en fait je suis loin d'etre un expert .net

    Sinon depuis hier j'ai continue mes recherches, et il me semble avoir compris au travers d'un article ( http://msdn2.microsoft.com/en-us/library/ms973872.aspx ) qu'en fait il etait possible de creer une couche intermediaire en C++ manage qui se chargerait de faire communiquer ma DLL en C++ non manage et ma DLL VB.NET non COM. J'ai fait qqes tests, j'arrive a creer une couche C++ managee qui communique avec mon vb.net, mais je n'arrive pas a partir du C++ non manage a appeler mon code C++ manage
    Ceci revient-il a faire ce dont tu as parle ? Est-ce un autre moyen ? Ou me suis-je plante dans mon interpretation ?


    I am a little lost

    Guyzeug.

  4. #4
    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
    Pourquoi ne pas faire tout ton programme en C++/CLI ? enfin bon ...

    Il est vrai que tu peut faire un wrapper en C++/CLI pour passer du managé au natif ( j'avais oublié cette solution ... ).
    Dans ce cas tu fait donc un programme en C++/CLI qui va faire le lien entre le C++ natif et .NET. Pour celà tu crées des méthodes et des classes natives ( ie. sans le mot clef "ref" ) dans ton wrapper que tu exportes ( avec dllexport ) et pour chaque classe que tu exportes tu fait le nécéssaire pour appeller les classes .NET de ton projet managé.

  5. #5
    En attente de confirmation mail
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Ok merci je vais donc perseverer dans cette voie

    Et pourquoi ne pas faire tout le programme en C++ ? CLI, tout simplement parce que je n'ai pas completement la main dessus. En gros je travaille dans une banque, qui utilise un logiciel d'une societe tiers, auquel on peut plugger des DLL C++ qui surchargent certains de lrus objets / classes. L'une de ses dll faite maison (que je nommerai MA.DLL) appelle la dll VB.net. Donc soit je peux recompiler MA.DLL en C++ / CLI sans que celle-ci ne cesse de fonctionner avec le reste du projet, soit je passe par la solution decrite precedemment, qui en theorie devrait fonctionner.
    Dans tous les cas je vais tester les 2, merci de ton aide

    Guyzeug.

  6. #6
    En attente de confirmation mail
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Je vous reviens sur ce sujet, puisque j'ai trouve une solution bien plus pratique que celle dans laquelle je m'etais lance initialement.

    En fait on peut a partir d'un code C++ non manage appeler une DLL COM sans que celle-ci soit enregistree, en creant des fichiers ".manifest" (surement evident pour bcp d'entre vous mais pour l' "expert" .NET que je suis cette solution se presenta tel le messie ).

    Il existe 2 articles tres bien fait qui expliquent comment faire, suivant que la DLL COM a ete cree via une technologie .NET ou non :

    Voici les liens :

    http://msdn2.microsoft.com/en-us/library/ms973913.aspx

    http://msdn2.microsoft.com/en-us/library/ms973915.aspx


    Mon cas est traite dans le 2eme lien, et j'arrive bien a implementer leur exemple (attention il existe une faute de frappe dans le code de l'article a un endroit, dans un des fichiers .manifest il faut lire name="SideBySide" et non name=" SideBySide").
    Cependant maintenant j'aimerais faire en sorte que ma DLL COM ne soit pas forcee de se trouver dans le dossier de mon application, or meme en rajoutant un fichier client.exe.config je n'arrive pas a faire fonctionner le tout.

    Si des personnes sont interessees par ce mecanisme et lisent les articles cites au-dessus, je serais interesse si elles ont une quelconque idee a propos de mon probeme

    Merci d'avance !

    Guyzeug.

Discussions similaires

  1. Peut on utiliser une DLL DotNEt (C#) dans un programme en C?
    Par Jayceblaster dans le forum Débuter
    Réponses: 12
    Dernier message: 12/02/2008, 17h46
  2. utiliser une DLL 2.0 dans un projet 1.1
    Par Spoonnny dans le forum Windows Forms
    Réponses: 6
    Dernier message: 14/01/2008, 13h22
  3. dll en .Net dans une appli en C++ MFC
    Par Nico_stras dans le forum C++/CLI
    Réponses: 1
    Dernier message: 13/04/2007, 07h47
  4. Réponses: 1
    Dernier message: 18/07/2006, 16h44
  5. [C#] Comment utiliser des dll win 32 dans un projet .NET
    Par Mickey.jet dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 31/05/2005, 13h45

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