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 |