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

Langage Delphi Discussion :

Utilisation DLL Visual Studio.NET dans BDS 2009


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 60
    Points : 52
    Points
    52
    Par défaut Utilisation DLL Visual Studio.NET dans BDS 2009
    Bonjour,

    J'ai des soucis pour utiliser une DLL .NET que j'ai faite sous Visual Studio 2008 avec Delphi 2009.

    Je crée une DLL.NET sous Visual et je souhaiterais l'utiliser dans une application Windows développé sous Delphi 2009.

    quelles sont les différentes solutions possibles ?
    COM ? si oui comment ?
    Utilisation assemblage de la DLL.NET (fichier TLB généré avec tlbexp) ? si oui comment ?

    J'ai regardé un peu partout mais j'ai pas trouver d'information pertinente sur mon problème.

    Merci de votre aide

    --
    Zugg

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Normalement, tu dois passer par le principe d'Assembly du .NET, si tu es .NET dès deux côtés, attention au version 2.0, 3.5, ...

    Pour le COM, .NET a une nouvelle norme, quand tu fais un COM en Delphi32 qui tu utilise en .NET, cela te génère une dll d'inter-opérabilité COM-.Net pour simuler une assembly sur l'objet COM ... c'est ce que j'ai le plus expérimenté, et lorsque tu causes COM avec des développeurs .NET, cela n'est pas évident, voir ICI, il y a bien sur la réciproque ...
    En fait, vouloir faire du bon vieux COM en .NET, cela ne doit pas être si facile et pas nécessaire... par contre, tu peux sur le même principe utiliser une Assembly .NET comme un objet COM, Voir RegAsm qui extrait d'un Assembly.NET le fichier TLB COM que tu importes dans Delphi (tu ne peux pas importer directement la DLL, il faut passer par RegAsm différent de RegSvr32)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 60
    Points : 52
    Points
    52
    Par défaut
    Je ne suis pas en .NET des 2 côtés.

    La DLL est faite en .NET sous Visual et son utilisation doit se faire dans une application Windows sous Delphi.

    Avec l'utilisation de Regasm, on n'est obligé de faire du COM apparemment. Cette solution n'est pas idéale car on ne peut pas avoir plusieurs versions de la DLL dans des répertoires distincts.

    Par contre sous Delphi, j'ai vu qu'on pouvait importer directement une assembly TLB généré par tlbexp à partir de la DLL .NET, mais je ne vois pas comment l'utiliser ?

    --
    Zugg

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Ah, oui Delphi 2009 est pur Win32 ... c'est vrai que maintenant c'est Delphi Prism ...

    Alors si tu es en Delphi 2009, c'est du COM, et effectivement, c'est une seule DLL recensée à la fois, car il faut un GUID pour identifier la classe et que c'est le même pour les différentes versions, tu peux toujours lancer à la volée le désenregistrement et l'enregistrement par la ligne de commande générée par Delphi ...

    Personnellement, je n'ai tenté qu'avec Delphi 7, donc c'est un peu vieux, ... j'ai tenté aussi TlbExp, je n'ai rien eu de concluant ... avec RegAsm, cela fourni la TLB comme TlbExp mais en plus elle est instanciable en Delphi ... heureusement, je ne l'ai fait que par curiosité, et je n'ai eu besoin de cela en réalité, ... j'ai tout fait pour l'éviter en fait !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 60
    Points : 52
    Points
    52
    Par défaut
    donc ok c'est uniquement du COM pour interfacer du code fait en .NET.
    Le problème du COM c'est qu'on ne peut pas exécuter au même moment 2 versions différentes d'une DLL similaire, à cause de son enregistrement en base de registres...

    Si je comprends bien, il faut que je passe RegAsm sur la DLL.NET et ensuite sous Delphi, je fais comment pour utiliser l'objet COM généré ? Menu Composants -> Importer un composant, et là je choisis dans la bibliothèque des types mon objet COM qui a été référencé par RegAsm je suppose, c'est bien ça ?

    Pas cool alors l'interopérabilité de .NET avec des languages non .NET... dommage

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Ben MicroSoft impose un nouveau standard qui remplace l'ancien, c'est bien connu comme technique !

    Et tout ce qui concerne l'inter-opérabilité MicroSoft et tout autre environnement, est douteuse, ils utilisent souvent des normes pondus par eux et par IBM, qui sont les seuls à les utiliser comme ils sont leaders, les moutons les suivent ... et comme par hazard, ils choisissent rarement la solution libre déjà existante pour imposer la leur payante !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 60
    Points : 52
    Points
    52
    Par défaut
    c'est clair !! et derrière c'est les développeur qui doivent tout refaire suivant les normes.

    Je vais surement refaire ma DLL .NET en Delphi (Windows) là au moins y'aura pas de soucis d'interopérabilité.

    En tout cas merci pour toutes ces précisions.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 8
    Points : 10
    Points
    10
    Par défaut Solution
    Salut,

    J'ai eu un travail du style à faire et en voici le résumé.

    Dans Visual studio :
    1) using System.Runtime.InteropServices;
    2) Devant chaque class : [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [Guid("B69F434D-0570-41f3-BC76-1908340BE5D8")]

    (le guid doit-être généré par tools/Create GUID)

    3) Vérifier que dans les propriétés du projet, dans Application, que la case Output type a la valeur Class Library.

    3') Vérifier que dans les propriétés du projet, dans Build, que la case 'Register for COM interop' soit coché.

    4) Lancer une fenêtre vsvars32.bat avec les fonctions en ligne de commande pour le csc, al, regasm et gacutil...

    5)Dans la cmd dos : taper dans l'ordre :
    1 - sn -k MyKey.snk
    Pour générer une clé pour un nom fort
    2 - csc /target:module maClass.cs
    Pour créer un fichier netmodule
    3 - al /out:maClass.dll maClass.netmodule /keyfile:MyKey.snk
    Pour générer la dll
    4 - gacutil -i maClass.dll
    Pour charger la dll dans le global assembly cache
    5 - regasm maClass.dll /tlb
    Pour la charger dans le registre.

    6) Sous Delphi :
    1 - Lancez votre projet.
    2 - Menu composants/Importer un composant
    3 - Importer une bibliothèque de type suivant
    4 - Sélectionner la dll (maClass.dll dans cet exemple) et suivant
    5 - Ajouter au projet
    6 - Maintenant vous devez y avoir accès (la dll est wrappé automatiquement par Delphi et le fichier est du type maClass_tlb.pas ne rien modifier sur ce fichier, en cas de problèmes il faut recommencer).

    !!!!!!!!!
    L'utilisation des types génériques dans la dll .Net pose quelques problèmes. Ils sont à éviter. Je travaille actuellement sur un moyen de les utiliser. A suivre dans un tutorial peut-être...
    !!!!!!!!!


    En cas de problèmes n'hésitez pas à me poser des questions.

    A bientôt

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

Discussions similaires

  1. Utilisation dll - visual studio 2008 - c++
    Par >-[]-Fab-[]-< dans le forum Windows
    Réponses: 9
    Dernier message: 22/05/2008, 15h53
  2. Utiliser Dll Visual C++ 6 dans Borland C++ 6.0
    Par WELCOMSMAIL dans le forum Visual C++
    Réponses: 4
    Dernier message: 23/01/2008, 17h02
  3. [Excel + C#] Utilisation sans Visual Studio .NET
    Par ketthos dans le forum Windows Forms
    Réponses: 6
    Dernier message: 03/07/2007, 12h32
  4. utilisation DLL avec visual studio .net
    Par G-OnZa dans le forum Visual C++
    Réponses: 2
    Dernier message: 27/04/2007, 15h56
  5. Probleme d'utilisation de directX 9 avec visual studio.net
    Par cranedoeuf dans le forum DirectX
    Réponses: 1
    Dernier message: 24/05/2004, 04h33

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