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

WinDev Discussion :

Intégrer DLL [WD14]


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 28
    Points : 23
    Points
    23
    Par défaut Intégrer DLL
    Bonjour,

    Je chercher à intégrer à mon projet WinDev 14 une DLL fournis par un prestataire. Ce dernier m'a fait une démonstration sous VB pour utiliser cette DLL : il faisait Projet/Référence/Ajouter une référence.

    Il pouvait ensuite instancier un objet provenant de la DLL, et la manipuler comme une classe locale (Instance.NomMéthode(...) ). Je cherche l'équivalent pour WinDev.

    J'ai donc trouver les fonctions ChargeDLL, Api et AppelDLL32. Cependant, aucune ne permet d'un accès aussi simple qu'en VB, nous sommes contraint de passer par des chaines de caractère pour définir le nom de la classe et/ou de la méthode.

    Merci d'avance pour tout élément d'avancement !

  2. #2
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 379
    Points : 4 496
    Points
    4 496
    Par défaut
    Bonjour

    Il y a eu des évolutions sur ce point mais malheureusement c'est dans la version 16

    http://doc.pcsoft.fr/fr-FR/?1000019149

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Il faut regarder du côté des objets automation:
    http://doc.pcsoft.fr/fr-FR/?1514014&...jet_Automation

    Éventuellement, tu peux nous donner ton exemple VB pour qu'on te montre comment l'adapter en WLangage.
    _

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Merci pour vos réponses.
    J'ai effectivement regardé du coté des "Automation", mais je n'ai pas compris leur rôle.

    Concernant le code VB :
    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
     
    Public MyLink As UCC_link
    Public MyConf As UCC_configuration
     
    Private Sub Form_Load()
    Dim result As Long
    Dim Error As Long
    Dim ErrorDescription As String
     
    Set MyLink = New UCC_link
    Set MyConf = New UCC_configuration
     
    MyLink.Open
    MyLink.SearchandSetAddress
    MyLink.Reset
     
    result = MyConf.InitialiseObject(MyLink)
    '...
     
    End Sub
    Je vais de ce pas approfondir mes lectures concernant les Automation!

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,
    Citation Envoyé par Leskate Voir le message
    J'ai effectivement regardé du coté des "Automation", mais je n'ai pas compris leur rôle.
    Pour faire bref, un objet Automation est un objet au sens logiciel, qui peut être créé et manipulé à travers l'infrastructure COM/OLE Automation de Windows.

    Un objet Automation est fourni par un composant logiciel.

    Le plus souvent un tel composant permet de créer différents types d'objets Automation, qui sont généralement combinés/structurés dans un modèle objet.
    Dans le cas présent, le composant que tu utilises fournit (au moins) 2 types d'objets: UCC_link et UCC_configuration.

    Pour en savoir plus: http://en.wikipedia.org/wiki/OLE_Automation

    Le composant est en général un fichier DLL (DLL ActiveX) ou un fichier exécutable (appelé EXE ActiveX).
    Tu as peut être aussi déjà utilisé des fichiers OCX ?
    Un fichier OCX fournit un "contrôle ActiveX" destiné à être "branché" sur une application via un container (souvent un OCX gère sa propre interface graphique qui est "plongée" dans l'interface graphique de son container). D'ailleurs WinDev propose le champ ActiveX qui est un container ActiveX.

    Attention !
    Un composant est désigné par un nom (ce n'est pas le nom du fichier).
    Les types d'objets du composant ont aussi leur nom.
    Parfois, on peut aussi avoir un n° de version.

    Tout ceci donne un nom d'objet Automation qu'il est nécessaire de connaître si tu veux pouvoir créer un objet Automation.
    Un exemple classique: "Excel.Application" désigne un objet Automation qui implémente l'application de Microsoft Excel.

    La base de registre de Windows est utilisée pour mémoriser le nom des objets automation et leur faire correspondre le fichier DLL, EXE ou OCX qui contient le code et les ressources de l'objet.

    Dans ton cas, quel est le nom du composant ???
    En attendant que tu en saches plus, j'utiliserai "MaDLL" comme nom de ton composant.

    Voici une traduction possible pour le code VB que tu nous as donné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    MyLink est un objet Automation "MaDLL.UCC_link"
    MyConf est un objet Automation "MaDLL.UCC_configuration"
    result est un entier
     
    MyLink>>Open()
    MyLink>>SearchandSetAddress()
    MyLink>>Reset()
     
    result = MyConf>>InitialiseObject(MyLink)

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    D'accord, je pense que la notion d'automation est comprise.

    Citation Envoyé par =JBO= Voir le message
    Le composant est en général un fichier DLL (DLL ActiveX) ou un fichier exécutable (appelé EXE ActiveX).
    Tu as peut être aussi déjà utilisé des fichiers OCX ?
    Un fichier OCX fournit un "contrôle ActiveX" destiné à être "branché" sur une application via un container (souvent un OCX gère sa propre interface graphique qui est "plongée" dans l'interface graphique de son container). D'ailleurs WinDev propose le champ ActiveX qui est un container ActiveX.
    Alors je viens de tester le composant ActiveX inclue de Windev. Une fois le champs inclus dans mon IHM, je peux choisir quel composant ActiveX je peux choisir. Le seul que je trouve en rapport avec mon problème semble être "RenishawICCServoAmpBalanceDislpay Class". Cependant, si je la sélectionne, Windev plante. Une requête au support technique a été émise, je suis en attente de réponse mais je n'y crois pas trop.

    Citation Envoyé par =JBO= Voir le message
    Dans ton cas, quel est le nom du composant ???
    Très bonne question ! Comment le savoir ? J'ai parcouru l'ensemble des documents techniques en rapport, je n'ai pas trouvé. Le plus proche, je pense, est :
    Citation Envoyé par Renishaw Technical Documentation
    CoUCC_link.dll contains a single COM class, UCC_link.

    UCC_link encapsulates the necessary device drivers that Windows requires in order to communicate with the controller. The client must create a UCC_link object in order to communicate with the controller. The UCC_link class implements interfaces IUCC_link, IUCC_link2 and IUCC_link3; IUCC_link3 is the class’default interface.
    Je pense que dès que je saurais le nom du composant, le problème sera réglé. Je tente de contacter mon fournisseur dès maintenant.

    Merci pour l’intérêt porté à mon souci.

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,
    Citation Envoyé par Leskate Voir le message

    Alors je viens de tester le composant ActiveX inclue de Windev. Une fois le champs inclus dans mon IHM, je peux choisir quel composant ActiveX je peux choisir. Le seul que je trouve en rapport avec mon problème semble être "RenishawICCServoAmpBalanceDislpay Class". Cependant, si je la sélectionne, Windev plante. Une requête au support technique a été émise, je suis en attente de réponse mais je n'y crois pas trop.
    Je ne voulais pas t'embrouiller, mais seulement être un peu complet dans mon explication.

    Le champ ActiveX de WinDev est un container pour un contrôle ActiveX seulement.
    Et apparemment, ce n'est pas ton cas. Ok ?
    En passant, un bon conseil: (gratuit )
    Fais bien attention au vocabulaire employé avec WinDev, les mots n'ont pas forcément le même sens que d'autres environnements de développement.
    Le "lexique WinDevien" est particulier.
    Par exemple ton expression «le composant ActiveX inclue de Windev» ne veut rien dire dans le contexte de WinDev.
    On parlera plutôt du champ ActiveX.
    Dans WinDev, les composants c'est autre chose.

    Citation Envoyé par Leskate Voir le message
    Citation Envoyé par =JBO= Voir le message
    Dans ton cas, quel est le nom du composant ???
    Très bonne question ! Comment le savoir ? J'ai parcouru l'ensemble des documents techniques en rapport, je n'ai pas trouvé.
    Si tu dois te débrouiller par toi même, je vois déjà 2 façons de faire.

    1. Rechercher directement dans la base de registre.

    Chaque classe d'objet du composant est enregistrée comme clé de la branche HKEY_CLASSES_ROOT.
    Dans ton cas, il suffit de rechercher une clé qui contient ".UCC_link".
    Si le composant est effectivement enregistré, alors la recherche affichera le nom complet de la classe d'objet (<nom composant>.<nom classe d'objet>) tel que tu dois l'utiliser dans WinDev.

    2. Utiliser l'explorateur d'objets de l'EDI de VB ou VBA

    Peut-être que VB6 est installé sur ton PC ?
    Ou alors,si une application de Ms Office est installée sur ton PC, tu peux utiliser l'EDI de VBA.
    Citation Envoyé par Leskate Voir le message

    Je chercher à intégrer à mon projet WinDev 14 une DLL fournis par un prestataire. Ce dernier m'a fait une démonstration sous VB pour utiliser cette DLL : il faisait Projet/Référence/Ajouter une référence.

    Il pouvait ensuite instancier un objet provenant de la DLL, et la manipuler comme une classe locale (Instance.NomMéthode(...) ).
    Une fois le composant référencé, tu affiches l'explorateur d'objets et tu trouveras le nom du composant dans la liste des bibliothèques.
    Avec l'explorateur d'objets, tu peux aussi faire une recherche sur un nom complet ou partiel d'une classe d'objets.

    Avec ces explications, tu es autonome pour continuer à avancer.
    _

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Ca marche !

    Merci pour ton aide précieuse. J'ai parcouru la base de registre comme conseillé. J'y ai trouvé mes classes de mes DLL (Renishaw.UCC_Link, ...) que j'ai donc pu utiliser comme des objets OLE.

    En passant, je tiens à m’excuser pour le vocabulaire non approprié. En effet, je "tâtonne" avec WinDev depuis quelques années, mais je n'ai jamais eu l'occasion d'être réellement formé à cet outil. Je sais que ca n'excuse rien, mais je me justifie

    Encore merci pour tout, je suis ravi : ça fonctionne!!

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

Discussions similaires

  1. Intégrer dll C# dans code C
    Par filoo85 dans le forum C
    Réponses: 1
    Dernier message: 27/10/2011, 17h33
  2. Intégrer une dll dans un EXE
    Par Akim13 dans le forum Langage
    Réponses: 5
    Dernier message: 15/09/2005, 02h11
  3. Comment intégrer un Delphi DLL dans CBuilder
    Par Xavier dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/09/2005, 16h49
  4. [Executable] Intégrer les DLL ou pas?
    Par Superstivix dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/06/2004, 10h17
  5. intégrer dll VB dans code C/C++
    Par inertia dans le forum MFC
    Réponses: 3
    Dernier message: 09/05/2004, 12h09

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