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

Delphi Discussion :

Assemblies .NET sous Delphi 7


Sujet :

Delphi

  1. #1
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut Assemblies .NET sous Delphi 7
    Bonjour!

    Est-il possible pour une application Win32 développée sous Delphi 7 d'accéder à des classes stockées dans des assemblies .NET ? En d'autres mots, m'est-il possible de faire apparaître dans ma fiche TForm un bouton .NET ou un objet DataGrid ou mieux encore d'implémenter des objets ADO.NET dans mon code ?

    Exemple pratique : je code en VB.NET une classe dont la seule méthode fait afficher un message "Hello World". Comment puis-je dans mon application Delphi pour Win32, construire la classe et exécuter la méthode pour faire afficher ce même message ?

    Merci!
    -Slimjoe

  2. #2
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Bon...

    Je vois que ça grouille d'intérêt ici dedans . J'imagine que c'est plus diffice que je ne le croyais...

    J'ai du nouveau et ça pourra peut-être vous donner une idée géniale. Il est possible d'enregistrer des assemblies .NET en objets COM à l'aide de l'outil regasm.exe (c'est l'équivalent de regsvr32 en .NET).

    Super hein ? Pas tant que ça.

    Ça ne fonctionne pas en Delphi 7 . Quand je fais "Import Type Library" je vois la bibliothèque dans la liste mais en la sélectionnant, je ne vois aucune classe disponible. Comme si la bibliothèque était vide.

    Quelqu'un a une idée ?

    Merci !
    -Slimjoe

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par slimjoe
    Bonjour!
    Est-il possible pour une application Win32 développée sous Delphi 7 d'accéder à des classes stockées dans des assemblies .NET ?
    D'appeler des méthodes d'une classe oui.
    Citation Envoyé par slimjoe
    En d'autres mots, m'est-il possible de faire apparaître dans ma fiche TForm un bouton .NET ou un objet DataGrid ou mieux encore d'implémenter des objets ADO.NET dans mon code ?
    Là je ne pense pas. Il existe l'interop entre .NET et Win32 l'inverse (partage de donnée) je doute. Regarde la JVCL il y a qq unités sur la manipulation du CLR à partir de Win32 mais je n'ai pas creusé + que ça.

    J'ai prévu qq questions/réponses pour la faq win32 sur le sujet mais je n'ai pas encore eu le temps de regarder.
    Citation Envoyé par slimjoe
    J'ai du nouveau et ça pourra peut-être vous donner une idée géniale. Il est possible d'enregistrer des assemblies .NET en objets COM à l'aide de l'outil regasm.exe (c'est l'équivalent de regsvr32 en .NET).
    Tu ne mélanges pas tout là ?
    J'espére que c'est pas pour un usage temps réel
    [edit]
    extrait de l'aide de D2005
    Déploiement des applications Interop COM
    Il faut garder deux choses importantes à l'esprit lors de l'utilisation de composants non managés. Tout d'abord, n'oubliez pas qu'un assemblage d'interopérabilité ne remplace pas le serveur COM ; il lui sert de proxy, de substitut. Les assemblages d'interopérabilité générés par tlbimp et Delphi 2005 ne sont pas une transformation du code non managé du composant en code managé. Chaque fichier nécessité par le composant dans un environnement de déploiement non managé, doit également être déployé dans un environnement managé, en plus des assemblages d'interopérabilité. Deuxièmement, les services d'interopérabilité du .NET Framework n'annulent pas la nécessité de recenser le serveur COM sur la machine de l'utilisateur final. Sachez que l'obligation de recensement vaut également lors du développement de votre application managée.
    ...
    et
    Utilisation de Platform Invoke avec Delphi 2005
    Cette rubrique décrit les techniques de base de l'utilisation d'API non managées à partir de Delphi 2005. Certaines erreurs et certains pièges courants sont signalés, et des informations de référence rapide pour la conversion des types de données Delphi sont fournies. Cette rubrique ne tente pas de présenter les fondements de platform invoke ou du marshaling de données. Reportez-vous aux liens présents à la fin de cette rubrique pour plus d'informations sur platform invoke et le marshaling. Une compréhension des attributs et de la manière dont ils s'utilisent est aussi fortement recommandée avant de lire ce document. L'API Win32 est utilisée pour plusieurs exemples. Pour plus de détails sur les fonctions d'API mentionnées, consultez la documentation du SDK Windows Platform. Cette section aborde les sujets suivants :
    • Appel de fonctions non managées
    • Structures
    • Fonctions de callback
    • Transmission de références d'objets
    • Utilisation d'interfaces COM

  4. #4
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Merci pour la réponse!

    Je mélange probablement beaucoup de choses alors je vais mettre ça simple: essayons de répondre à mon exemple pratique.

    Exemple pratique : je code en VB.NET une classe dont la seule méthode fait afficher un message "Hello World". Comment puis-je dans mon application Delphi pour Win32, construire la classe et exécuter la méthode pour faire afficher ce même message ?
    Je fais déjà ça dans des DLL Win32. J'ai une procédure exports dans une DLL qui fais un showmessage. Je déclare alors la méthode external et à l'exécution, j'ai mon showmessage.

    Je n'ai jamais codé d'objet COM avec Delphi, mais je sais que ce n'est pas beaucoup plus compliqué. Une fois construit et enregistré, je n'ai qu'à faire "Import Type Library" dans Delphi 7 qui me produit un unit me permettant d'utiliser ma classe dans mon application.

    Ma question est donc fort simple : est-ce que je peux faire un assembly .NET dans lequel j'aurai implémenté une classe qui contiendrait une méthode HelloWorld() que je pourrais appeller à partir d'une application Win32 codée en Delphi 7 ?

    Merci beaucoup!

    P.S.
    J'ai parcouru rapidement la FAQ (Delphi .NET et Delphi Win32) et je n'ai rien trouvé qui semble traiter de mon sujet. Est-ce qu'il te serait possible de me donner un ou deux liens stp ? Merci .
    -Slimjoe

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par slimjoe
    Est-ce qu'il te serait possible de me donner un ou deux liens stp ? Merci .
    Je regarde ça ce WE, je te tiens au courant.

  6. #6
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Va jeter un petit coup d'oeil à cet endroit :

    http://sourceforge.net/projects/delphinet/
    et là:
    http://sourceforge.net/forum/forum.p...orum_id=168035



    Cordialement
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Pour la partie COM regarde
    COM Callable Wrapper
    http://msdn2.microsoft.com/en-us/library/f07c8z1c.aspx
    et
    Runtime Callable Wrapper
    http://msdn.microsoft.com/library/de...blewrapper.asp

    Il y aussi la section Interoperability sur le premier lien.

    Ensuite pour le partage de zone mémoire entre le code gére et non-gére il faut regarder du coté des pointeurs fixed (http://laurent-dardenne.developpez.c...phiDotNet/#L13)
    Sous Delphi.net Borland utilise la classe GCHandle (http://msdn2.microsoft.com/en-us/lib....gchandle.aspx) alors que le C# masque sont utilisation par le mot clé Fixed.

    Tu peux aussi consulter le livre Pratique de .NET 2 et C# 2 qui aborde ce sujet avancé.

  8. #8
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Merci merci!

    Tout ces liens sont vraiment super! Ils vont assurément m'aider dans ma recherche.

    Mais je suis un tantinet têtu de nature alors je reste accroché sur l'avenue COM . J'ai dépouillé mes besoins et démarré une autre discussion. Je vous invite à y participer à l'adresse suivante :

    http://www.developpez.net/forums/showthread.php?t=155694


    Merci encore!!
    -Slimjoe

  9. #9
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par slimjoe
    Merci encore!!
    De rien.
    Attention, il y qq restrictions
    http://msdn2.microsoft.com/en-us/lib...2t(VS.80).aspx

    La libération mémoire est problématique car l'objet COM une fois son compteur de référence à 0 est supprimé mais pas l'objet .NET qui lui est pris en charge par le GC car, à la différence des RCW les CCW ne propose pas de libération du type InteropServices.Marshal.ReleaseComObject(AObjetCom) etc
    Autre pb si l'objet .NET contient des réfernces vers d'autre objet COM.
    Tu développes sur des oeufs...

    D'aprés Patrick Smacchia (version trés raccourcis)

    Mais là on n'est plus dans le bon forum

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

Discussions similaires

  1. Utiliser une DLL ecrite en VB.NET sous Delphi
    Par vg-matrix dans le forum Langage
    Réponses: 6
    Dernier message: 13/11/2012, 11h50
  2. Compact Framework .NET sous Delphi
    Par Laurent Dardenne dans le forum Delphi .NET
    Réponses: 3
    Dernier message: 29/05/2008, 18h10

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