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 .NET Discussion :

[D2005] Utiliser un assemblage .Net


Sujet :

Delphi .NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 141
    Points : 109
    Points
    109
    Par défaut [D2005] Utiliser un assemblage .Net
    Bonjour à tous,

    J'utilise le logiciel Worl Wind qui permet de consulter des images satellites de n'improte quelle région du globe ( vraiment génial... pour vous changer les idées après qq heures de Delphi ).

    Ce programme est en .net et utilise une dll worldwindows qui possède de nombreuses méthodes dont une permettant de lui faire faire un goto à tel endroit en passant la latitude et la longitude en paramètre.

    A travers quelques posts notamment ceux de L Dardenne, j'ai vu qu il est apparemment possible d'utiliser une telle DLL dans une appli Win32... mais j'ai pas tout compris !!!

    Mon premier problème est beaucoup plus basique. Avant de savoir si on peut mettre en win32 ou pas, j'aimerai voir si cela fonctionne...Sous Delphi 2005, je fais Composant, importer un composant, importer un assemblage .net... Pas de problème ça roule, il recense correctement Worldwindow.dll pour l'utiliser comme un objet COM... il me propose de créer l'unité. Là miracle j'ai un beau tree dans lequel je vois bien la méthode convoitée GotoLatLon...

    Euh, mais là on fait quoi ??? Cela ne ressemble pas à une unité classique. Comment fait on pour invoquer les méthodes ?

  2. #2
    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,
    je parlais de code .NET pas de composant .NET.
    On peut utiliser du code d'un assemblage utilisant par exemple les expressions régulières.
    Mais un composant .NET sous Win32 je n'avais pas tenté, c'est déjà pas aisé d'importer un ActiveX en VCL .NET !

    J'ai regardé les sources dispo sur le site de la Nasa effectivement c'est du full .NET (C#). je n'ai pas installé la distrib (180 Mg), vérifie si elle ne contient pas des fichier tlb et si cela change qq chose.

    Quelle est la classe de l'objet COM que tu souhaites utiliser ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 141
    Points : 109
    Points
    109
    Par défaut
    Merci Laurent pour ta réponse précise.

    Mais là je crois que je suis largué, donc je reprends le problème à la base, ton tuto sur .net dans la main droite et ton tuto sur la gestion d'évènements automation dans la main gauche.

    Je vais prendre le problème au début à savoir essayer déjà de faire fonctionner le truc sous .net avant d'envisager une utilisation en win32.

  4. #4
    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 giloutho
    ton tuto sur la gestion d'évènements automation
    Celui-ci me semble plus approprié, non ?

  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
    Peut être qq piste issue du SDK .NET 1.1 :

    Type Library Exporter (Tlbexp.exe) ( permet de créer une TLB à partir d'un assembly)
    ms-help://MS.NETFrameworkSDKv1.1.FR/cptools/html/cpgrftypelibraryexportertlbexpexe.htm

    Résumé de la conversion d'un assembly en bibliothèque de types
    ms-help://MS.NETFrameworkSDKv1.1.FR/cpguidenf/html/cpconassemblytotypelibraryconversionsummary.htm

    Empaquetage d'un assembly pour COM
    ms-help://MS.NETFrameworkSDKv1.1.FR/cpguidenf/html/cpconpackagingassemblyforcom.htm

  6. #6
    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
    Tout compte fait je viens de télécharger le soft en question. Il est vraiment super, c'est un trés bon outil pour les instits, entre autres !
    Alors pour en revenir au pb de départ :
    la dll C:\Program Files\NASA\World Wind 1.3\WorldWindow.dll ne contient pas d'objet COM ce qui est confirmé par la génération d'information de registre, nécessaire pour manipuler un GUID :
    C:\Program Files\NASA\World Wind 1.3>regasm WorldWindow.dll /regfile:World.reg
    Microsoft (R) .NET Framework Assembly Registration Utility 1.1.4322.573
    Copyright (C) Microsoft Corporation 1998-2002. Tous droits réservés.

    Avertissement de RegAsm*: Aucun script de registre ne sera produit, car il n'existe aucun type à inscrire
    Objet Com du type (exemple C#) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    namespace ManagedVCL.Test
    {
    	[Guid("9CD9D34D-0114-48FB-BCAA-6192661B6E1E"),
    	 InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    	public interface ITestClass
    	{
    		string Hello {get; set;}
    		int DoubleIt(int x);
    		void RaiseException();
    	}
    Ce qui fait que l'export de TLB :
    C:\Program Files\NASA\World Wind 1.3>tlbexp WorldWindow.dll
    (crée un fichier WorldWindow.tlb)
    ou la génération via delphi renvoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    unit WorldWindow_TLB;
    ...
    // *******************************************************  //
    // Type Lib: C:\Program Files\NASA\World Wind 1.3\WorldWindow.dll (1)
    // LIBID: {0388813E-E0E7-3FFD-B697-1C7CD2DE9085}
    ...
    // ********************************************************//
    // GUIDS declared in the TypeLibrary. Following prefixes are used:        
    //   Type Libraries     : LIBID_xxxx                                      
    //   CoClasses          : CLASS_xxxx                                      
    //   DISPInterfaces     : DIID_xxxx                                       
    //   Non-DISP interfaces: IID_xxxx                                        
    // *******************************************************//
    const
      // TypeLibrary Major and minor versions
      WorldWindowMajorVersion = 1;
      WorldWindowMinorVersion = 2;
     
      LIBID_WorldWindow: TGUID = '{0388813E-E0E7-3FFD-B697-1C7CD2DE9085}';
     
     
    implementation
     
    uses ComObj;
     
    end.
    Pas facile d'instancier cet 'objet COM'. Tout compte fait la dll utilisée ici, contient une classe .NET et pas un objet COM.
    Le produit que tu m'as indiqué ( http://interop.managed-vcl.com ) semble être 'un pont' permettant l'utilisation de classe .NET sous Win32, enfin c'est à vérifier.

    Voilà, donc le mieux est ,comme je te l'indiquais, d'utiliser Delphi .NET.
    Mais là c'est peut être une autre problèmatique

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 141
    Points : 109
    Points
    109
    Par défaut
    Merci beaucoup Laurent... pour tes recherches...

    Je vais faire des essais avec le soft http://interop.managed-vcl.com/. je commence à entrevoir comment il fonctionne.

    Quoiqu'il en soit cela va me faire un excelent fil conducteur pour essayer de me mettre à .Net.

    Pour l'instant ce qui me gêne le plus c'est que mon appli principale ne peut pas migrer sous .net. ( composant Win32).

    Mais une fois de plus grâce au forum j'ai pu trouver une solution. Worlwind a une fonction qui m'avait complètement échappé : on peut lui demander d'aller sur un point précis en copiant une phrase genre worldwind\goto lat=XX long=YY dans le presse papier et en faisant Control V dans World Wind.

    Dans le forum et la FAQ j'ai trouvé tout ce qu'il me fallait : une routine pour vérifier que WorldWind est lancé si ce n'est pas le cas une routine pour le lancer, une routine pour le faire passer en avant plan, une routine pour coller ma phrase dans le presse papier et enfin une routine pour simuler le control V dans World Wind.

    Bon d'accord c'est barbare et beaucoup moins élégant qu'un pilotage de la DLL mais au moins cela va permettre de répondre à une certaine urgence.

    Si certains d'entre vous sont intéréssé par ce logiciel, n'hésitez pas à me contacter. J'ai en tête de réaliser une petite appli permettant d'exploiter le cache. Car toutes les régions consultées sont stockées sur le disque dans un dossier cache.

    Amitiés à tous et encore merci pour tous les posts qui m'ont permis d'avancer...

  8. #8
    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 giloutho
    Quoiqu'il en soit cela va me faire un excelent fil conducteur pour essayer de me mettre à .Net.
    Tu n'as pas choisi la facilité
    La classe WorldWind hérite de Winform.control je crois, ce qui fait qu'il est préférable de l'utiliser sous un projet Delphi Winform.
    Ensuite il faut recopier les DLL WindWorld dans le répertoire du projet , ajouter une référence à WorldWind.dll et là...bon courage avec les messages d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    unit testForm;
     
    interface
     
    uses
      System.Drawing, System.Collections, System.ComponentModel,
      System.Windows.Forms, System.Data,WorldWindow;
     
    type
      TWinForm = class(System.Windows.Forms.Form)
     ...
      public
        Instance :WorldWindow.WorldWindow;
        constructor Create;
      end;
    ...
    procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);
    begin
      Instance:=WorldWindow.WorldWindow.Create;
    end;
    Voilà je me suis arrêté là.
    Ensuite je suis comme une poule devant une fourchette, c'est à dire pour le moins dubitatif

    Enfin pour utiliser un objet COM d'un assembly .NET sous Win32 il faut générer un fichier de registry avec regasm afin de l'enregister sinon l'interface n'est pas reconnue. Mais là encore je ne suis pas très éloigné du poulailler...

    Bon dev.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/01/2013, 20h30
  2. [WD17] Utilisation assemblage .NET
    Par thierrybatlle dans le forum WinDev
    Réponses: 2
    Dernier message: 24/01/2012, 11h45
  3. Utilisation d'assemblages .NET
    Par dvinet17 dans le forum Windev Mobile
    Réponses: 0
    Dernier message: 07/09/2011, 16h21
  4. [WD15] Utilisation d'un assemblage .NET
    Par therealmancool dans le forum WinDev
    Réponses: 10
    Dernier message: 12/05/2010, 11h37
  5. [WD12E] Utilisation Assemblage .NET d'ESRI
    Par hgoethe dans le forum WinDev
    Réponses: 7
    Dernier message: 07/12/2009, 11h45

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