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

VB 6 et antérieur Discussion :

ddl com et Late binding


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 112
    Par défaut ddl com et Late binding
    Bonjour,

    dans le cadre de mon projet je dois créer une dll (un bouchon) avec des caractéristiques bien spécifiques.
    Elle ne doit pas être référencée dans mon projet autrement que par la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Function MadllCreate Lib "Madll2.dll" () As Object
    J'en ai déduis que c'était une dll windows.

    D'autre part l'appel dans mon projet doit être le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim MyInst As Object
    Set MyInst = MadllCreate
    MyInst.Connect txtCode.Text, TxtPasswd.Text
    J'ai essayé de faire la dll à partir du tutoriel suivant http://bbil.developpez.com/traductions/vb6/create-dll/
    mais ça ne fonctionne pas.
    J'ai une erreur quand je passe sur la ligne Set MyInst = MadllCreate, mon application est carrément fermée.

    Merci de l'aide que vous voudrez bien m'apporter.

  2. #2
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Ce n'est pas possible,
    On ne peut pas instancier une dll windows.

    La declaration implique qu'il s'agit d"une dll non activeX
    On ne peut faire des Set MyInst = MadllCreate que sur des dll activeX

  3. #3
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Citation Envoyé par Delbeke Voir le message
    Ce n'est pas possible,
    On ne peut pas instancier une dll windows.
    Tout à fait d'accord, mais la MSDN indique qu'il est possible de récupérer un object depuis une dll windows (DECLARE/Instruction) !

    Facultatif. Type de données de la valeur renvoyée par une procédure Function ; il peut s'agir de Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non pris en charge actuellement), Date, String (de longueur variable uniquement) ou Variant, un type défini par l'utilisateur ou un type d'objet.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 112
    Par défaut
    ça ne marche pas non plus, toujours le même clash vb.

  5. #5
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Il serait déjà intéressant d'identifier quand ça plante,
    en plaçant un msgbox dans la dll window, juste après l'appel
    etc.

    Sinon, désolé, personnellement j'utilise les standards indiqués plus haut en passant toujours par les pointeurs,
    qu'il s'agisse d'object, de string, tableaux ou udt.
    Maintenant sur le fond, c'est toujours intéressant de repousser les limites.

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 112
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Function MadllCreate() As Object
        MsgBox "Bonjour c'est moi la dll"
        Set MyClass1 = New Class1
        MsgBox "Bonjour c'est moi la dll à nouveau"
     
        Set MadllCreate= MyClass1
        MsgBox "Bonjour c'est moi la dll je pars"
     
    End Function
    En fait je ne vois passer que le premier message...

    Ai-je oublié quelque chose dans mes déclarations ?

  7. #7
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Citation Envoyé par Dadou74 Voir le message
    Bonjour,

    dans le cadre de mon projet je dois créer une dll (un bouchon) avec des caractéristiques bien spécifiques.
    Elle ne doit pas être référencée dans mon projet autrement que par la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Function MadllCreate Lib "Madll2.dll" () As Object
    J'en ai déduis que c'était une dll windows.

    D'autre part l'appel dans mon projet doit être le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim MyInst As Object
    Set MyInst = MadllCreate
    MyInst.Connect txtCode.Text, TxtPasswd.Text
    J'ai essayé de faire la dll à partir du tutoriel suivant http://bbil.developpez.com/traductions/vb6/create-dll/
    mais ça ne fonctionne pas.
    J'ai une erreur quand je passe sur la ligne Set MyInst = MadllCreate, mon application est carrément fermée.

    Merci de l'aide que vous voudrez bien m'apporter.
    C'est l'une ou l'autre, pas les 2.

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 112
    Par défaut
    Bonsoir,

    merci de vos réponses.
    Si je comprends bien c'est soit je fais une dll ActiveX auquel cas je dois la déclarer en tant que référence dans le projet mais je peux garder le code tel quel, soit je fais une dll Windows et je ne peux pas l'instancier de la sorte ?

  9. #9
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Oui.

    Dans le titre tu parles de «Late Binding»
    Pourquoi ?

    Tu dis également,
    Elle ne doit pas être référencée dans mon projet autrement que par la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         Declare Function MadllCreate Lib "Madll2.dll" () As Object
    La valeur de retour d'une dll Windows ne peut être un object
    (à la limite un pointeur vers un object)

  10. #10
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 112
    Par défaut
    Je parle de late binding parce que je travaille sur un object

    Par exemple en late binding, on écrira :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim xl As Object
    Set xl = CreateObject("Excel.Application")
    Tandis qu'en early binding, on écrira plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim xl As Excel.Application
    Set xl = New Excel.Application
    Je ne peux pas ajouter ma dll dans le projet en tant que référence.

    En fait la dll originale (dont je n'ai pas le source) est écrite en C, elle fait appel à un webservice. Chez le client tout se passe bien car on a accés au webservice.
    Sur nos postes de développement on ne peut pas faire appel au webservice et donc utiliser la dll.
    Le but est donc de la réécrire et comme nous ne maitrisons pas le C... VB6 s'impose à nous. Cela étant comme nous ne pouvons pas avoir 2 code sources du projet différents il faut que les 2 dll possèdent exactement les même méthodes.
    Maintenant si ce n'est pas possible nous chercherons une autre solution.

  11. #11
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 112
    Par défaut
    Je pense que VB6 ne peut pas répondre à ma demande je vais donc me tourner vers du .Net en espérant que ce sera mieux.

    Juste par hasard, si vous savez, y a t'il un tuto ou exemple qui correspond à ma demande en .Net ?

  12. #12
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Il n'y a pas de raison que tu n'y parviennes pas avec VB6

    Ta déclaration ne doit pas être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Function MadllCreate Lib "Madll2.dll" () As Object
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Function MadllCreate Lib "Madll2.dll" () As Long
    ensuite pour récupérer l'object
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim MyInst As Object, ptr as long
    ptr=MadllCreate()
    MyInst = ptr2obj(ptr)
    '.../...
    MyInst.Connect txtCode.Text, TxtPasswd.Text
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function Ptr2Obj(ByVal ptrObj As Long) As Object
         Dim oClone As Object
                      
         CopyMemory oClone, ptrObj, 4      ' Récupération
                      
         Set Ptr2Obj = oClone
         CopyMemory oClone, 0&, 4          ' Détruire l'objet local
    End Function

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

Discussions similaires

  1. Pb late binding - Creation d'un rendez-vous Outlook
    Par gpinson dans le forum Général VBA
    Réponses: 1
    Dernier message: 31/01/2011, 20h19
  2. Réponses: 0
    Dernier message: 31/01/2011, 11h51
  3. Problème late binding avec Word et Outlook
    Par sibama dans le forum VB.NET
    Réponses: 4
    Dernier message: 06/12/2009, 21h24
  4. Late binding et Objets COM
    Par M4tthieu dans le forum C#
    Réponses: 4
    Dernier message: 07/08/2007, 12h28
  5. [C#, .NET 1.1]Ouvrir un classeur excel en late binding
    Par tontonplaisir dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/06/2007, 10h54

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