Problème de lecture d'un paramétré retourné par une méthode en c++ (méthode d'un

Résolu
cs_japouni Messages postés 22 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 29 mai 2014 - 28 mars 2013 à 11:39
cs_japouni Messages postés 22 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 29 mai 2014 - 29 mars 2013 à 08:39
Bonjour,


Je suis entrain d'utilisé les méthodes d'une dll com au niveau d'un code c++ .

J'ai une méthode de la dll qui renvois un résultat en tant que paramétré.le problème c'est que j'arrive pas a lire la bonne valeur renvoyée dans ce paramétré par cette méthode.

> Définition de la fonction au niveau du fichier tlh de la dll:


 int Authentifier (
        _bstr_t PathCatFile,
        _bstr_t PathPacFile,
        BSTR * Result );


> Mon appelle de la méthode au niveau c++:

unsigned short*  res=0 ;
retVal = pConsultation->Authentifier(var11, var12, &[color=]res/color);


> d’après le doc de la dll res est une chaîne de caractère comment je peut lire la valeur retourne par ce paramétré(comment faire le cast d'un unsigned short* en chaine de caractere en c++ ).

> j'ai essayé la lecture comme suit mais je retrouve pas les bonnes valeurs renseignées au niveau de la doc:
printf("Authentifier %i \n",(signed short int)res);
printf("Authentifier %i \n",strlen((char*)res));
printf("Authentifier %i \n",(int)res);
printf("Authentifier %s \n",(char*)res);

8 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
28 mars 2013 à 20:57
Salut,

en général, les dll COM allouent des bstr qu'il faut nettoyer apres utilisation. On peut utiliser une fonction de convertion en char*.
Exemple :

#include <comutil.h>
#pragma comment(lib, "comsuppw.lib")

// Simule la fonction de la DLL
int Authentifier(_bstr_t PathCatFile, _bstr_t PathPacFile, BSTR* Result)
{
*Result = ::SysAllocString(L"Test");
return 0;
}

// Exemple d'utilisation de la fonction
BSTR bstrText;
Authentifier(_bstr_t(""), _bstr_t(""), &bstrText);
wprintf_s(L"%s\r\n", bstrText);

// convertion en char*
char* lpszText = _com_util::ConvertBSTRToString(bstrText);
puts(lpszText);

// il faut nettoyer
::SysFreeString(bstrText);
delete[] lpszText;


bye...
cs_japouni Messages postés 22 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 29 mai 2014
28 mars 2013 à 11:45
Bonjour,


Je suis entrain d'utilisé les méthodes d'une dll com au niveau d'un code c++ .

J'ai une méthode de la dll qui renvois un résultat en tant que paramétré.le problème c'est que j'arrive pas a lire la bonne valeur renvoyée dans ce paramétré par cette méthode.

> Définition de la fonction au niveau du fichier tlh de la dll:


Code :
int Authentifier (
_bstr_t PathCatFile,
_bstr_t PathPacFile,
BSTR * Result );


> Mon appelle de la méthode au niveau c++:

Code C/C++ :
unsigned short* res=0 ;
retVal = pConsultation->Authentifier(var11, var12, &res);


> d’après le doc de la dll res est une chaîne de caractère comment je peut lire la valeur retourne par ce paramétré(comment faire le cast d'un unsigned short* en chaine de caractere en c++ ).

> j'ai essayé la lecture comme suit mais je retrouve pas les bonnes valeurs renseignées au niveau de la doc:
Code :
printf("Authentifier %i \n",(signed short int)res);
printf("Authentifier %i \n",strlen((char*)res));
printf("Authentifier %i \n",(int)res);
printf("Authentifier %s \n",(char*)res);
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 mars 2013 à 11:48
"unsigned short*" donc chaine UNICODE.

ciao...
cs_japouni Messages postés 22 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 29 mai 2014
28 mars 2013 à 11:52
Bonjour ,

merci pour votre réponse ,mais j'ai pas compris comment faire pour lire la bonne valeur de ce paramétré. Est ce que que vous pouvez me donner le syntaxe.
Exemple :
printf("Authentifier %i \n",(char)res);



merci par avance.

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 mars 2013 à 12:36
doc de BSTR:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms221069(v=vs.85).aspx

printf, 20 ans que je n'ai pas utilisé, tu chercheras.

ciao...
cs_japouni Messages postés 22 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 29 mai 2014
28 mars 2013 à 15:25
Merci pour votre réponse ,mais j'ai pas la réponse a ma question est ce que quelqu'un peut m'aider svp
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 mars 2013 à 17:09
wprintf(%s, tonBstr);
un truc de ce genre.

ciao...
cs_japouni Messages postés 22 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 29 mai 2014
29 mars 2013 à 08:39
Merci beaucoup yann_lo_san :) ca marche merci merci merci :)
Rejoignez-nous