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