Je croyais avoir donné une piste mais je crois qu'il faut que j'y passe un peu plus de temps
Le type BSTR (Basic STRing) est un pointeur de 32 bits (comme tous les pointeurs) qui pointe vers un tableau de caractères UNICODE.
En représentation UNICODE, 1 caractère est codé sur 2 octets, alors qu'en ASCII, 1 caractère est codé sur 1 octet.
Ce type est utilisé par Automation pour la manipulation de chaînes de caractères. Il est défini dans les spécifications d'OLE 2.0 comme
typedef OLECHAR FAR* BSTR;Voici deux fonctions en C++ utilisant l'api windows pour le transtypage en char*:
Conversion d'un BSTR en char*
void BSTRtoASC (BSTR str, char * &strRet)
{
if ( str != NULL )
{
unsigned long length = WideCharToMultiByte (CP_ACP, 0, str, SysStringLen(str),
NULL, 0, NULL, NULL);
strRet = new char[length];
length = WideCharToMultiByte (CP_ACP, 0, str, SysStringLen(str),
reinterpret_cast <char *>(strRet), length, NULL, NULL);
strRet[length] = '\0';
}
}
Conversion d'un char* en BSTR
void ASCtoBSTR (char * str, BSTR * strRet)
{
if ( str != NULL )
{
unsigned long length = strlen(str);
int ResultLength = MultiByteToWideChar (CP_ACP,MB_PRECOMPOSED,
reinterpret_cast <char *>(str),length,NULL,0);
*strRet = SysAllocStringLen( NULL, ResultLength);
MultiByteToWideChar (CP_ACP,MB_PRECOMPOSED,
reinterpret_cast <char *>(str),length,*strRet,ResultLength);
}
}
En espérant que ça fasse avancer le schmilblick
Cordialement
Cette contribution était de : http://old.wdforge.org/newbb/viewtopic.php?forum=14&topic_id=5699&post_id=24184