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

C++ Discussion :

C++ et VB6 ne font pas bon ménage!


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 101
    Par défaut C++ et VB6 ne font pas bon ménage!
    Bonjour,

    Voila j'ai besoin de créer une DLL en C++ qui sera utilisé par un programme en VB6, j'ai beau testé tout les tutoriels qui se trouve sur le net, je n'y arrive pas.

    Sous VS2008 je créé un projet Win32 vide, qui contient 1 seul .cpp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    extern "C"
    {
    	__declspec(dllexport) int DisplayHelloFromDLL(int a,int b)
    	{
    		return a+b;
    	}
    }
    Et voici le programme VB6:
    Déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Declare Function DisplayHelloFromDLL Lib "ma_dll.dll" (ByVal a As Long, ByVal b As Long) As Long
    Et l'appel de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub Command1_Click()
    Dim a As Long
    Dim b As Long
     
    a = 1
    b = 2
     
        MsgBox API.DisplayHelloFromDLL(a, b)
    End Sub
    Et là je tombe sur une erreur:
    Erreur d'exécution 49: Convention d'appel de DLL incorrecte.

    Quel est le problème? Apparemment cette erreur est générer si lors de la déclaration je lui passe un mauvais type d'argument, mais ici se n'est pas le cas!

    J'ai oublié quelque chose dans ma DLL C++?
    J'ai tout essayer avec des fichiers .def, etc... mais rien ça ne veux pas!

    Merci

  2. #2
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Je ne connais pas trop VB, mais le fait de déclarer côté VB un point d'entrée avec des long en paramètre ne pose-t-il pas un problème si dans ta DLL la fonction a une interface avec des int? N'y-a-t-il pas un type équivalent en VB (int ou integer)?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 101
    Par défaut
    Si en VB6 le type Integer existe et j'ai essayé aussi de déclarer ma fonction dans VB6 avec des Integer et non des Long mais rien a faire

  4. #4
    NairodDorian
    Invité(e)
    Par défaut
    "Erreur d'exécution 49: Convention d'appel de DLL incorrecte"
    Le message parle de lui même.
    Utilise la convention d'appel standard.
    Utilise un fichier def plutôt que __declspec(dllexport).

    Sinon pour revenir à la convention d'appel :
    #include <windows.h>
    __declspec(dllexport) int WINAPI DisplayHelloFromDLL(int a,int b)
    {
    return a+b;
    }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 101
    Par défaut
    Citation Envoyé par NairodDorian Voir le message
    Sinon pour revenir à la convention d'appel :
    #include <windows.h>
    __declspec(dllexport) int WINAPI DisplayHelloFromDLL(int a,int b)
    {
    return a+b;
    }
    Lorsque je fais ça, j'obtiens l'erreur: "Impossible de trouvé le point d'entrée DisplayHelloFromDLL dans madll.dll"




    J'ai beau essayer avec un fichier .def, mais je dois mal mis prendre:
    • Je génère le fichier MAP (.map)
    • Je récupère la signature de ma fonction (ici ?DisplayHelloFromDLL@@YGHHH@Z (int __stdcall DisplayHelloFromDLL(int,int)))
    • Mon fichier .def:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      LIBRARY	"MaDLL"
      EXPORTS
      	DisplayHelloFromDLL ?DisplayHelloFromDLL@@YGHHH@Z (int __stdcall DisplayHelloFromDLL(int,int))


    Mais quand je compile j'obtiens l'erreur:
    fatal error LNK1118: syntax error in '?DisplayHelloFromDLL@@YGHHH@Z' statement

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 101
    Par défaut
    Ah ba c'est bon ça fonctionne!

    Dans le fichier .def, il faut mettre l'ordinal et non le nom de la fonction décorée
    Soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LIBRARY	"MaDLL"
    EXPORTS
    	DisplayHelloFromDLL @1
    @1 étant l'ordinal qui m'est donné dans le fichier .map généré par VS

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

Discussions similaires

  1. [DisplayTag] Tri et pagination ne font pas bon ménage
    Par tiboudchou dans le forum Taglibs
    Réponses: 4
    Dernier message: 31/03/2010, 12h22
  2. [Linux]Thread et sockets qui ne font pas bon ménage
    Par manudwarf dans le forum Threads & Processus
    Réponses: 1
    Dernier message: 13/10/2009, 00h09
  3. rich:calendar, DIV et IE ne font pas bon ménage
    Par chotana dans le forum JSF
    Réponses: 1
    Dernier message: 20/04/2009, 17h16
  4. Le wifi et Club Internet ne font pas bon ménage!
    Par Ylias dans le forum La taverne du Club : Humour et divers
    Réponses: 5
    Dernier message: 20/08/2007, 10h30
  5. Réponses: 2
    Dernier message: 12/08/2007, 15h27

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