konvert na BYTE* v C++
Ahoj.
Vie mi niekto poradit ako skonvertovat retazec typy BSTR na pole BYTE*,ktore nasledne kodujem do Base64
Prikladam aj cast a procky ktora prebehne bez problemov ale pritom sa pole vobec nevytvorii!! cize HRESULT <> S_OK
_bstr_t r1(user);_bstr_t r2(passw);
r1+=r2;
BYTE *p=new BYTE(sizeof(BYTE));
HRESULT hr;
//en-gb 0x0809 2057
hr=VarUI1FromStr(r1,0x0809,LOCALE_NOUSEROVERRIDE,p ); //konvert na BYTE*
if (hr=S_OK )
MessageBox(NULL,TEXT("Konveria bola uspesna"),TEXT("..."),0+MB_ICONINFORMATION );
Diikes
tym
BYTE *p=new BYTE(sizeof(BYTE));
chcel autor povedat co? Radsej ostan u VisualBasicu kym sa nenaucis programovat a neujasnis pojmy ako alokacia pamate, pole, pointer apod. Nechaj z toho len
BYTE *p;
zbytok az budes vediet kolko chces alokovat (napr. pomocou r1.length()) a ci vobec potrebujes alokovat nove pole na to (co s tym chces potom robit?)
Odkial si nabral ze na tu konverziu mozes pouzit VarUI1FromStr ?
trieda _bstr_t ma zadefinovany operator const char*( ), tak ho skus pouzit p = (const char*)r1;
P.S. asi to bude lepsie pretypovat na TCHAR pointer kvoli tomu ze to moze byt aj unicode a potom robit s TCHAR podla toho co potrebujes. Napr.
... inac ten VarUI1FromStr konvertuje snad po jednom znaku alebo ako to je, takze ked uz tak by malo stacit
BYTE skonvertovany_znak;
VarUI1FromStr(r1, neco, LOCALE_NOUSEROVERRIDE, &skonvertovany_znak);
a skonvertuje to prvy znak.
Ak to vyhadzuje chybu tak mas problem pravdepodobne v druhom parametri. Mohol by si si debuggerom pozriet presne aku hodnotu to vrati, alebo v kode porovnat so symbolmi DISP_E_BADVARTYPE, DISP_E_OVERFLOW, DISP_E_TYPEMISMATCH, E_INVALIDARG, E_OUTOFMEMORY aby si vedel aspon priblizne v com je problem.