Re: Type BSTR en WinDev |
Sujet: Re: Type BSTR en WinDev par Bebe sur 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 |