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

Messages postés
25
Date d'inscription
jeudi 27 avril 2006
Dernière intervention
29 mai 2014
- - Dernière réponse : cs_japouni
Messages postés
25
Date d'inscription
jeudi 27 avril 2006
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);
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
20
3
Merci
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...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de yann_lo_san
Messages postés
25
Date d'inscription
jeudi 27 avril 2006
Dernière intervention
29 mai 2014
0
Merci
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);
Commenter la réponse de cs_japouni
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
41
0
Merci
"unsigned short*" donc chaine UNICODE.

ciao...
Commenter la réponse de BruNews
Messages postés
25
Date d'inscription
jeudi 27 avril 2006
Dernière intervention
29 mai 2014
0
Merci
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.
Commenter la réponse de cs_japouni
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
41
0
Merci
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...
Commenter la réponse de BruNews
Messages postés
25
Date d'inscription
jeudi 27 avril 2006
Dernière intervention
29 mai 2014
0
Merci
Merci pour votre réponse ,mais j'ai pas la réponse a ma question est ce que quelqu'un peut m'aider svp
Commenter la réponse de cs_japouni
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
41
0
Merci
wprintf(%s, tonBstr);
un truc de ce genre.

ciao...
Commenter la réponse de BruNews
Messages postés
25
Date d'inscription
jeudi 27 avril 2006
Dernière intervention
29 mai 2014
0
Merci
Merci beaucoup yann_lo_san :) ca marche merci merci merci :)
Commenter la réponse de cs_japouni

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.