Любые идеи о том, как сделать BSTR из LPCOLESTR? Глупо зацикливаться..
Преобразовать LPCOLESTR в BSTR?
Ответы (2)
LPCOLESTR
— это просто const wchar_t*
, поэтому вы можете использовать SysAllocString()
для создания BSTR
:
LPCOLESTR olestr = ...;
BSTR bstr = SysAllocString(olestr);
Обязательно вызовите SysFreeString()
, когда закончите работу с BSTR
. См. также документацию MSDN по BSTR
s.
person
Adam Rosenfield
schedule
01.08.2009
Обратите внимание, что OLECHAR == wchar_t верно только на платформе Wintel. Не уверен, что были на других платформах, но это было забавно, и на них BSTR, вероятно, тоже просто char *, так что ваш ответ правильный для всех практических целей;)
- person peterchen; 02.08.2009
Разница между BSTR и LPCOLESTR заключается в том, что BSTR имеет префикс длины строки перед строкой, а LPCOLESTR — нет.
BSTR не обязательно имеет окончание \0, обозначающее конец строки, поскольку длина строки имеет префикс, для преобразования я обычно использую класс CComBSTR (atlcomcli.h), ctor принимает либо BSTR, либо LPCOLESTR в качестве аргумента, и там является членом BSTR() для получения представления BSTR:
CComBSTR b( yourolestring )
// b.BSTR()
CComBSTR будет обрабатывать выделение/освобождение, поэтому риск утечки памяти исключен.
person
AndersK
schedule
02.08.2009