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

MFC Discussion :

dll sous visual basic utilisable par visual c++


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Points : 56
    Points
    56
    Par défaut dll sous visual basic utilisable par visual c++
    est - il possible de créer une DLL avec visual basic (6) et de l'utiliser avec visual c++ (6) ?
    si oui on fait comment? car je ne vois pas comment généré le fichier lib ou/et h.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Points : 347
    Points
    347
    Par défaut
    bonjour

    il faut charger la library dynamiquement.
    par exemple si tu as une fonction de ta DLL du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int GetListTag(int SrPortNo,BOOL axe1,BOOL axe2,BOOL axe3,BOOL axe4,BOOL axe5,BOOL axe6);
    tu cree un pointeur sur ta fonction avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef int (CALLBACK* LPFNGETTAG)(int,BOOL,BOOL,BOOL,BOOL,BOOL,BOOL);
    et des que tu as besoin de ta fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    HINSTANCE hClcltr=LoadLibrary("madll.dll");
     
    cordialement
     
    LPFNGETTAG   lpfnGetTag;
    lpfnGetTag = (LPFNGETTAG)GetProcAddress(hClcltr,"GetListTag");
     
    IdOk = lpfnGetTag (mynumport,0,1,0,0,0,0); // appel de la fonction
     
    FreeLibrary( hClcltr );

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 671
    Points
    10 671
    Billets dans le blog
    3
    Par défaut
    Il faut faire attention aux types utilisés dans ta fonction visual basic.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Points : 56
    Points
    56
    Par défaut
    bonjour et merci beaucoup pour vos réponses,
    j'ai fait un essai
    en VBA j'ai une DLL qui à une fonction bob():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function bob()
        MsgBox "hello"
    End Function
    en visual c++ j'ai créé un projet vide

    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
    #include<windows.h>
     
    typedef int (CALLBACK* LPFNGETTAG)(void);
     
    int main(void)
    {
    HINSTANCE hClcltr=LoadLibrary("dll_de_test.dll");
     
    //cordialement
     
    LPFNGETTAG   lpfnGetTag;
    lpfnGetTag = (LPFNGETTAG)GetProcAddress(hClcltr,"bob");
     
     lpfnGetTag (); // appel de la fonction
     
    FreeLibrary( hClcltr );
    return 0;
    }
    alors j'obtiens un programme qui plante méchament...
    ai-je oublié quelque chose?
    merci d'avance

  5. #5
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    en VB, une dll c'est pas obligatoirement un objet COM ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Points : 56
    Points
    56
    Par défaut
    j'en sais rien du tout!!!

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Points : 56
    Points
    56
    Par défaut
    tout ce que je peux dire c'est que en visual basic j'appel la fonction de la dll comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
     
    Private Declare Function bob Lib "dll_de_test.dll" () As Long
     
    Private Sub Form_Load()
     
        Dim plop As Object
        Shell "regsvr32 /s dll_de_test.dll"
        Set plop = CreateObject("Nom_de_la_dll.Bibliotheque_1")
     
        plop.bob
    End Sub

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Points : 56
    Points
    56
    Par défaut
    j'ai remarqué que le projet sous visual basic est une dll activeX, c'est une vrai dll? ou c'est encore un truc inutilisable?

  9. #9
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 671
    Points
    10 671
    Billets dans le blog
    3
    Par défaut
    Ton code C++ ne vérifie pas les erreurs. Il suffit que la fonction bob n'existe pas pour que GetProcAddress renvoie NULL, et alors ça plante.
    Commence par créer avec succès une dll normal en VB (-> forum VB), et verifie qu'elle exporte bien la fonction attentdue avec ça:
    http://www.dependencywalker.com/
    ensuite ton code C++ devrait fonctionner, une fois modifié pour tester les erreurs de chaque fonction.
    Si tu ne peux créer que des ActiveX avec VB, hum, c'est pas gagné.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Points : 56
    Points
    56
    Par défaut
    en fait il me faudrai l'inverse de ça (c'est à dire lire les dll de vb sn c++):
    http://rp.developpez.com/vb/tutoriels/dll/
    or j'ai lu qur les dll en visual basic sont en fait des activeX ...
    vous pensez que c'est mort?

  11. #11
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    non, mais il faut faire autrement

    c'est un projet MFC ?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Points : 56
    Points
    56
    Par défaut
    je sais pas trop,
    en fait je n'arrive pas, et un développeur est passer me voir, à utiliser une bibliotèque en c++ (c'est un fichier tlb), en fait j'ai déja poser des question dessu là:
    http://www.developpez.net/forums/vie...779580#2779580
    or comme on peux le lire, je n'ai aucun pb en visual basic avec cette bibliotèque. Or avec le travail que je dois réaliser, l'application devient déja lourde, sachant que en c++ je sais faire sans pb la même chose alors qu'en vb, je connais moins et je perd du tps, sans compter la lourdeur. bref je cherche à créer un dll en VB pouvant faire intermédiaire entre le programme que controlé par la librairie tlb et mon programme en c++.
    As-tu une idée?

  13. #13
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 671
    Points
    10 671
    Billets dans le blog
    3
    Par défaut
    Un tlb, ça décrit un composant COM. On sort du cadre du C++, c'est de la programmation COM. Si tu utilises les MFC, avec #import (note que ce n'est pas une directive C++ standard, on est dans du spécifique COM avec VC++), VC++ va te générer des classes pour facilement te servir de ton ActiveX. Utilise ces classes, car sinon, c'est grosso modo infaisable.

  14. #14
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par nico-pyright(c)
    en VB, une dll c'est pas obligatoirement un objet COM ?
    Bien vu !
    Effectivement c'est une dll COM
    Pour appeler la fonction bob() il faut appeler

    *CoInitialize pour demarrer COM
    *CoCreateInstanceEx avec comme param. le GUID de la dll

    *QueryInterface sur le pointeur de bob()

    Aller voir sur www.codeproject il ya peut-etre un exemple


    Sinon il ya aussi avec #import dont parle Aurelien ou bien #pragma comment nom_dll

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Points : 56
    Points
    56
    Par défaut
    j'ai trouvé ça:
    http://www.codeproject.com/com/vb_from_vc.asp
    ça à l'aire bien

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Points : 56
    Points
    56
    Par défaut
    juste un etit mot pour dire qu'avec le tutorial que j'ai donné, ça marche nickel!!!!

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

Discussions similaires

  1. Convertir Visual Basic 6 en visual Basic 2010 Express
    Par excalybur dans le forum VB.NET
    Réponses: 0
    Dernier message: 04/12/2014, 19h58
  2. dll non reconu par visual basic 6
    Par olosimam dans le forum C#
    Réponses: 1
    Dernier message: 18/11/2009, 01h27
  3. Réponses: 1
    Dernier message: 07/07/2006, 15h49
  4. D'Excel à Access par Visual Basic 6.0
    Par moane dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/04/2006, 17h25
  5. Accès Réseau a une base de données Access par Visual Basic
    Par thegreatbato dans le forum VBA Access
    Réponses: 5
    Dernier message: 06/01/2006, 14h04

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