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