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 :

Bonnes pratiques pour créer une DLL .NET visible par COM


Sujet :

C++/CLI

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2011
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2011
    Messages : 204
    Points : 511
    Points
    511
    Par défaut Bonnes pratiques pour créer une DLL .NET visible par COM
    Bonjour à tous,

    Dans le cadre d'un projet, je dois créer une DLL en C++/CLI pouvant être utilisée en VB6. Du peu que j'en sais sur le sujet, il faut que ladite DLL soit compatible COM.

    Hélas, malgré de nombreuses recherches, je ne sais toujours pas bien comment m'y prendre

    J'utilise Visual C++ 2010 Express et je suis un peu perdu. Certes, j'ai rendu l'assembly "ComVisible", mais rien de plus pour le moment !

    Il semblerait qu'il ne faille exposer que des interfaces et non des classes directement. J'avoue que mon code n'est pour le moment pas très propre et qu'il expose des méthodes qui retournent des objets managés... J'imagine que VB6 ne peut pas utiliser directement des objets WinForms

    J'ai pensé à écrire des wrappers, mais le boulot serait rébarbatif et certainement inutile. Il paraît qu'il y a une sorte de mécanisme de wrappers automatiques, mais c'est encore flou pour moi...

    Il est aussi question d'un tlbexp et/ou d'un regasm. De même, il serait nécessaire de signer son assembly et de donner des GUID pour chaque classe/méthode ?

    Quels sont vos conseils ? Est-ce que je m'y prends de la bonne manière ? Quelles sont vos connaissances à ce sujet ?

    L'idéal serait encore d'utiliser la biblio en VB .NET

  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
    Normalement, tu dois en effet exposer des interfaces, chacune avec un GUID et le bon attribut (InterfaceTypeAttribute), et tes classes doivent hériter de ces interfaces et avoir elles-mêmes un GUID.

    Tu n'as, par contre, pas besoin de mettre des GUID sur les méthodes elles-mêmes.
    À ma connaissance, tu n'as pas besoin de signer un assembly pour l'enregistrer avec RegAsm.
    Mais pour la TLB, je ne sais pas. Il est possible (je dis bien "possible") qu'elle se retrouve embarquée en tant que ressource dans la DLL elle-même...
    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 confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2011
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2011
    Messages : 204
    Points : 511
    Points
    511
    Par défaut
    Après avoir lu de nombreuses ressources sur le sujet, j'y vois heureusement plus clair.

    Visiblement, il n'est pas nécessaire de signer son assembly si celui-ci n'est pas dans le GAC (Global Assembly Cache), mais privé.

    L'étape de l'export du TLB (tlbexp) est indispensable pour utilisation dans VB6.

    Maintenant, tout fonctionne, mais j'ai utilisé l'attribut "ClassInterfaceType.AutoDual" qui peut poser des problèmes de versioning, il paraît.

    Quelqu'un aurait plus d'infos ?

Discussions similaires

  1. Bonnes pratiques pour développer une IHM en JAVA
    Par jeromeSERRE dans le forum Interfaces Graphiques en Java
    Réponses: 13
    Dernier message: 20/11/2010, 19h17
  2. [C++] Besoin d'aide pour créer une dll.
    Par Vince dans le forum Débuter
    Réponses: 3
    Dernier message: 15/03/2010, 13h55
  3. La bonne méthode pour créer une DLL ?
    Par tintin72 dans le forum Windows
    Réponses: 2
    Dernier message: 18/05/2008, 11h26
  4. Comment (ou peut on) créer une DLL .NET ?
    Par Mickey.jet dans le forum Delphi .NET
    Réponses: 4
    Dernier message: 02/04/2006, 15h54

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