Здравствуйте, Аркадий, Вы писали:
ЮЖ>>Вообще "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);
}
}