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 :

Vb et C++


Sujet :

MFC

  1. #1
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut Vb et C++
    bonjour,
    je cherche à utiliser un ocx VB sous visual c++ mais certaines fonctions ont comme paramètre "ByRef IsOK as boolean" et du coup il me met une erreur lorsque je met un booléen c++ en paramètre. pourquoi?

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    bonjour
    peux tu nous mettre le code de la façon dont tu charges ta DLL (dynamique statique... -import ou loadlibrary) ainsi que le message d'erreur que le compilateur te donne?

    Cordialement

  3. #3
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    et bien j'insert l'ocx en faisant Projet, Add To Projet, Components and control.

    Après, j'utilise une fonction de cet ocx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	bool R;
    	m_Ocx.Send("strinasend",R);
    l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    'Send' : cannot convert parameter 1 from 'char [11]' to 'unsigned short ** '

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    Peut tu donner la declarationde ton ocx,j'ai l'impression que celui ci veut que tu lui passe des pointeurs (le BOOL est declare by ref et toi tu lui envoie la variable donc probleme) et il semble de meme pour la chaine que tu lui envoie (il semble vouloir un pointeur sur un chaine et tu lui passe directement la chaine)

    Attention il n'y a pas d'equivalence de format de chaine de caractere entre le vb et le C++, il faut que tu connaisse la declaration de ton ocx en general on utilise un BSTR.

    cordialement

  5. #5
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    et bien voila la declaration de mon ocx:
    Object.Send(ByRef Buff as string, ByRef IsOK as boolean)

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    ça c'est la definition VB ,
    nous voulons voir la definition C++ du wrapper de l'ocx .

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    Re
    Tu dois donc bien passer des pointeurs a ton ocx en vb (eg : byref)
    Etant donnée que ton ocx utiliseun string, bien que je puisse me tromper j'utiliserai plutot un bstr de genre

    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
     
    int size;
    BOOL *mybool;
    CString mystring;
    BSTR *stringOut;
     
     
    mystring.format("strinasend");
    size = mystring.GetLength()+1;
    char * buffer = new char[ size ];
    strncpy( buffer, mystring, size );
    *stringOut = SysAllocStringByteLen(buffer, size);
     
    m_Ocx.Send(&stringout,&R);
     
    ...
     
    free(buffer);
     
    tiens moi au courant.

  8. #8
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    ça c'est la definition VB ,
    nous voulons voir la definition C++ du wrapper de l'ocx .
    qu'est ce que c'est?

    sinon pour ton code ricky78, il me met toujours une erreur pour le booléen.

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    le wrapper est la façon dont tu associe les fonction de ta DLL vb au C++.
    Etant donnée que tu l'as ajouté par les ressources ce n'est pas toi qui a codé le wrapper.
    tu dois neamoins avoir dans ton code un endroit ou il y a un lien entre le vb et le C++ (import des fonction).
    Peut tu mettre l'erreur sur le booleen, et n'y a til plus l'erreur sur la chaine de caractere

  10. #10
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    désolé, je devai pas etre reveillé ce matin. donc l'erreur est sur la string pas sur le booléen
    'Send' : cannot convert parameter 1 from 'unsigned short *** ' to 'unsigned short ** '

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    la facon de passer la string depend comment l'ocx travaille avec elle, de toute façon tu n'as que trois choix possibles :

    m_Ocx.Send(stringout,&R);
    m_Ocx.Send(*stringout,&R);
    m_Ocx.Send(&stringout,&R);

    cordialement

  12. #12
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    ah ok ca marche enfin ca compile
    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
     
    	int size; 
    	BOOL *mybool; 
    	CString mystring; 
    	BSTR *stringOut; 
     
     
    	mystring.Format("strinasend"); 
    	size = mystring.GetLength()+1; 
    	char * buffer = new char[ size ]; 
    	strncpy( buffer, mystring, size ); 
    	*stringOut = SysAllocStringByteLen(buffer, size); 
     
     
     
    	m_SPLUSInterf.Send(stringOut,&b);
    merci bien

  13. #13
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    me revoilà. je relance le topic parce que donc ca compile bien mais ca me renvoie un message d'erreur.

    voici la fonction dans mon wrapper :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void C_SObj::Send(BSTR* buffer_XML, BOOL* IsOK)
    {
    	static BYTE parms[] =
    		VTS_PBSTR VTS_PBOOL;
    	InvokeHelper(0x6003001f, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
    		 buffer_XML, IsOK);
    }
    et donc lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	BOOL b; 
     
        BSTR bstr = stringaSend.AllocSysString();
     
    	Obj.Send(&bstr,&b);
     
        ::SysFreeString( bstr );
    le boolean b me renvoie faux. (cad que le traitement de la chaine de caractere s'set mal passée)

    donc est ce que c'est vraiment possible d'utiliser cette methode de la dll VB sous C++ ou y a t il une autre methode que je n'ai pas encore testée?

    Merci

  14. #14
    Expert confirmé

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

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    A priori, si ça te renvoie faux, c'est que l'appel s'est bien passé. L'erreur serait plutot dans une mauvaise utilisation de la dll. C'est lié à ton algo, pas au code d'appel (surtout si le wrapper a été généré automatiquement).

  15. #15
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    je n'ai pas d'algo donc je ne pense pas que le probleme vienne de la. Mais est ce que la generation d'une variable par le class wizard pour utiliser ce composant peut etre à l'origine de l'erreur?

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