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?![]()
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?![]()
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
et bien j'insert l'ocx en faisant Projet, Add To Projet, Components and control.
Après, j'utilise une fonction de cet ocx :
l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 bool R; m_Ocx.Send("strinasend",R);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 'Send' : cannot convert parameter 1 from 'char [11]' to 'unsigned short ** '
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
et bien voila la declaration de mon ocx:
Object.Send(ByRef Buff as string, ByRef IsOK as boolean)
salut,
ça c'est la definition VB ,
nous voulons voir la definition C++ du wrapper de l'ocx .
![]()
Ce qui est affirmé sans preuve peut être nié sans preuve Euclide.
Les conversions numériques en C,C++,C++/CLI
DLL d'extensions : écriture d'un plug-in de classe
Démarrer avec les MFC 2/2
Création d'un ActiveX MFC
Intégration d'une imprimante PDF pour éditions automatisées
Migrer du code de Visual C++ 6.0 vers Visual C++ 2005
Démarrer avec les MFC sous Visual C++1/2
la Faq Visual C++ 500 Q/R,Mon blog
Aide en Ligne MFC
Cours et tutoriels C++ - FAQ C++ - Forum C++.
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.
qu'est ce que c'est?ça c'est la definition VB ,
nous voulons voir la definition C++ du wrapper de l'ocx .![]()
sinon pour ton code ricky78, il me met toujours une erreur pour le booléen.
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
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 ** '
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
ah ok ca marcheenfin ca compile
![]()
merci bien
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);
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 :
et donc lorsque je fais :
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); }
le boolean b me renvoie faux. (cad que le traitement de la chaine de caractere s'set mal passée)
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 );
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
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).
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