Здравствуйте, Юрий Жмеренецкий, Вы писали:
ЮЖ>Здравствуйте, Аркадий, Вы писали:
ЮЖ>>>Вообще "The preferred method of passing binary data is to use a SAFEARRAY of VT_UI1, which will not be translated by OLE."
ЮЖ>>>но если очень нужно, то см. SysAllocStringByteLen: "This function is provided to create BSTRs that contain binary data."
А>>Это да, а как конвертировать из BSTR в char*?
ЮЖ>Что значит "конвертировать" ? Здесь нужно только преобразовать указатели. SysAllocStringByteLen выделяет буфер на n байт(столько же вернет и SysStringByteLen), сохраняет размер и возвращает указатель на начало буфера как BSTR.
ЮЖ>ЮЖ>int main()
ЮЖ>{
ЮЖ> char data[] = {'1', '2', 0, 0, '3', '4', 0, '5', '6'};
ЮЖ> size_t size = sizeof(data)/sizeof(char);
ЮЖ> if(BSTR bstr = ::SysAllocStringByteLen(data, size))
ЮЖ> {
ЮЖ> assert(::SysStringByteLen(bstr) == size);
ЮЖ> char* str = reinterpret_cast<char*>(bstr);
ЮЖ> assert(memcmp(str, data, size) == 0);
ЮЖ> ::SysFreeString(bstr);
ЮЖ> }
ЮЖ>}
ЮЖ>
Спасибо!! Вот я тупил, как-то считал обязательным перевод даже мусорных байт в wchar... =) Действительно же, так намного проще.