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

Signaler
Messages postés
25
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
29 mai 2014
-
Messages postés
25
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
29 mai 2014
-
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

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
20
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...
Messages postés
25
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
29 mai 2014

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);
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
"unsigned short*" donc chaine UNICODE.

ciao...
Messages postés
25
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
29 mai 2014

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.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
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...
Messages postés
25
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
29 mai 2014

Merci pour votre réponse ,mais j'ai pas la réponse a ma question est ce que quelqu'un peut m'aider svp
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
wprintf(%s, tonBstr);
un truc de ce genre.

ciao...
Messages postés
25
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
29 mai 2014

Merci beaucoup yann_lo_san :) ca marche merci merci merci :)