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

API, COM et SDKs Delphi Discussion :

[COM] Comment utiliser une dll DotNet dans un projet win32 ?


Sujet :

API, COM et SDKs Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 2
    Points
    2
    Par défaut [COM] Comment utiliser une dll DotNet dans un projet win32 ?
    Salut à tous!

    Voila j'ai un petit souci je dois utiliser une dll DotNet dans un projet Win32, visiblement c'est possible certains parlent de passer par COM.

    Dans l'esprit je vois la chose comme une dll tampon qui permettra de faire le lien.

    Si quelqu'un a des infos ou des liens je suis preneur ;-)

    Merci

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Quel langage utilises-tu pour ton projet Win32 VB6 ou Delphi car si tu l'acceptes, je peux déplacer ton sujet dans les forums dédiés, ici tu trouveras plutôt des réponses dans le sens inverse : Win32 > DotNet

    Sinon dans le cas où tu travailles sous Visual Studio .Net, il est tout à fait possible de regénérer la dll DotNet en l'incrivant en tant que COM
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 2
    Points
    2
    Par défaut re
    Oui tu peux le deplacer

    Le projet est en delphi c'est un projet existant auquel je dois inclure ma dll en c# DotNet

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Salut,

    Si tu cherches "dotnet com callable wrapper" sur goole tu devrais trouver des liens intéressants, j'en ai pris un au hasard qui explique rapidement la manip : http://www.dnzone.com/ShowDetail.asp?NewsId=126

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 80
    Points : 60
    Points
    60
    Par défaut
    Salut !

    En effet , tu peux utiliser une Dll dotnet dans un projet COM.
    Avant de commencer notes bien ce répertoire qu'on va appeler PATH, alors
    PATH = C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin
    (qui peut etre différent chez toi selon ou tu as installé visual studio .net)

    Alors pour créer ton assembly utilisables dans un projet COM il faut :

    1- Dans ton projet Dotnet, tu vas dans les propriétés du projet (pas de la solution) ensuite dans la fenetre de propriété tu vas dans "Propriétés de configuration/Générer" et tout en fin de ligne tu mets l'option "Inscrire comme COM interop" à True.

    2- Ensuite il va falloir que tu signes ta dll dotnet.Pour ce faire :

    a- utilises l'utilitaire sn.exe qui se trouve dans PATH pour créer une paire de clé comme ceci : sn -k mesclés.snk
    b- dans ton projet dotnet, ouvres le fichier "AssemblyInfo.cs", tout en bas, renseigne le fichier qui contient tes clés :
    [assembly: AssemblyKeyFile("..\\..\\..\\mesclés.snk")] (il va sans dire qu'il ne faut pas que tu te goures dans le chemin relatif du fichier de clés)

    3- tu peux maintenant générer ton assembly signé.Il va te créer ton assembly et un fichier ".tlb" qui en fait contient les prototypes de tes fonctions dotnet ainsi que les conversions de type .net=>COM.C'est ce fichier que tu vas référencer dans ton projet COM !

    4- ce n'est pas encore fini, ,maintenant pour que tout marche bien, il faut enregistrer ton assembly dotnet !! pour cela utilises l'utilitaire regasm.exe qui se trouve dans PATH: regasm monassembly.dll

    5- ensuite il va falloir déplacer l'assembly dotnet dans le répertoire des assembly : C:\WINDOWS\assembly, soit tu le fais à la main (glisser-déplacer) soit tu utilises l'utilitaire gacutil.exe qui se trouve toujours dans PATH.

    6- tout devrait maintenant bien fonctionner

    - Notes juste que pour que tes classes dotnet puissent etre utilisées et vues par des appli COM,il faut renseigner pour toutes les classes dotnet que tu veux exposer l'attribut :
    [ClassInterface (ClassInterfaceType.AutoDual)] (juste au dessus de public class ...) et n'oublie pas de faire un "using System.Runtime.InteropServices;" car sinon il ne reconnait pas cet attribut.
    - 2e note, toutes les classes dotnet que tu voudras instancier dans un projet COM doivent posséder un constructeur sans argument car c'est que celui la que le projet COM appelera pour instancier la classe , c'est à dire du style : "public maClasse () .."

    Voilà voilà , te voilà parti pour faire de jolis NET<=>COM interop !

    j'ai utilisé VB6 mais je pense que ca doit etre pareil pour tous

    Bon courage et à plus !


  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 2
    Points
    2
    Par défaut re
    merci beaucoup ! ! !

    Par contre je trouve pas "Inscrire comme COM interop" ou approchant dans BDS 2006

    Je continue mes travaux et vous tiens au courant encore merci....

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 2
    Points
    2
    Par défaut re
    Je n'ai pas trouvé d'option equivalente sous BDS ou peut etre que je ne cherche pas au bon endroit.
    Si vous pouvez m'aider sur ce point...

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 2
    Points
    2
    Par défaut re
    J'ai trouvé ! !
    tout se trouve dans le fichier AssemblyInfo.cs . . .

    c'est tout bete ;-)

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 2
    Points
    2
    Par défaut re
    J'ai suivi toute ta demarche , il me genere mon assembly mais pas de tlb tu as une idée?

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. Réponses: 9
    Dernier message: 06/06/2007, 15h40
  3. Comment utiliser des dll C++ dans un projet C# ?
    Par kreitech dans le forum C#
    Réponses: 5
    Dernier message: 20/02/2007, 16h49
  4. [Langage]Comment utiliser une dll .NET dans VB6?
    Par BouB dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/04/2006, 14h20

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