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 Visual C++ appelée dans un programme Visual Basic


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Points : 16
    Points
    16
    Par défaut DLL Visual C++ appelée dans un programme Visual Basic
    Bonjour à tous,

    Voici mon probleme:
    - j'ai crée une DLL sous Visual C++ avec comme point d'entrée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Programmer(LPSTR *fichier, LPSTR **selectionnee, LPSTR **Version , LPSTR *fichier2)
    donc comme vous pouvez le voir j'ai 2 chaines de caractères fichier et fichier2, et 2 tableaux de chaines de caractères.
    Le problème vient des tableaux cela crée une erreur qui ferme le programme. j'aimerais savoir comment mettre en argument un tableau 1D, l'utiliser et son appel sous VB.

    merci

  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 n y a pas d'equivalence enttre le VB et le C++ pour passer les chaine de caractere, si tu veux echanger des chaine tu dois utiliser un BSTR (basic string) comme format d'echange
    par exemple pour une fonction



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void __stdcall GetListTag(BSTR *stringOut)
    tu renvois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     *stringOut = SysAllocStringByteLen(buffer, size);


    et en vb



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare Function ident Lib "GetList.dll" Alias "GetListTag" (ByRef chaine As String) As Long

    pour lancer la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim fn As Long
    Dim chaine As String
    fn = ident(chaine)

    Nota n'oublie pas le
    __stdcall dans la declaration de ta fonction et de cree un .def pour que le C++ ne decore pas le nom de ta fonction

    bon courage

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Merci pour ta réponse mais mon problème est d'envoyer un un tableau de chaines de caratères et non une chaine de caratères.

    en faite quelle est la différence entre _cdecl et __stdcall ?

    merci

  4. #4
    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
    Tu peux evidemment renvoyé un tableau de BSTR

    Pour ta question _cdecl __stdcall sont des manieres dont sont envoyés les parametres des fonctions ( de droite a gaudhe ou de gauche a droite) et d'autre choses bien sur.

    Si tu exportes tes fonctions avec _cdecl tu pourras les reutiliser avec le C++ mais pas le VB

    _stdcall et la maniere "standard" d'appel de fonction qui est le seul standard du VB donc DLL C++ vers VB

    Cordialement

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    justement ma question est "Comment renvoyé un tableau de BSTR?"

    merci

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Personne n'a une solution car sa me bloque pas mal dans l'avancé de mon projet

    merci

  7. #7
    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
    tu peux aussi transformé tes tableaux de chaine en une seul avec un caractere d'espacement et tu le met en une BSTR.
    puis tu retraite ta la chaine en vb en la transformant le bstr en un tableau de string

    Cordialement

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    merci bcp pour ta réponse car c'est ce que j'ai fais au final


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

Discussions similaires

  1. récupérer le temps passé lors d'un appel dans un programme
    Par ColonelCasey dans le forum Windows Phone
    Réponses: 2
    Dernier message: 25/06/2013, 17h31
  2. Réponses: 7
    Dernier message: 23/10/2012, 17h17
  3. Réponses: 5
    Dernier message: 14/01/2008, 16h39
  4. Liaison d'une dll Visual C++ dans un programme c++Builder
    Par Cyrilh7 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/11/2003, 13h49

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