Re: Type BSTR en WinDev

Posté par Bebe le 25/9/2008 10:31:43
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