Конвертировать LPCOLESTR в BSTR? - PullRequest
1 голос
/ 02 августа 2009

Есть идеи, как сделать BSTR из LPCOLESTR? Глупая вещь, чтобы зацикливаться на ..

Ответы [ 2 ]

5 голосов
/ 02 августа 2009

LPCOLESTR - это просто const wchar_t*, поэтому вы можете использовать SysAllocString() для создания BSTR:

LPCOLESTR olestr = ...;
BSTR bstr = SysAllocString(olestr);

Обязательно позвоните SysFreeString(), когда вы закончите со своим BSTR. См. Также документацию MSDN по BSTR s

.
2 голосов
/ 02 августа 2009

Разница между BSTR и LPCOLESTR заключается в том, что BSTR имеет длину строки с префиксом перед строкой, а LPCOLESTR - нет.

BSTR не обязательно должен иметь окончание \ 0, обозначающее конец строки, так как длина строки имеет префикс, для преобразования я обычно использую класс CComBSTR (atlcomcli.h), а ctor принимает либо BSTR, либо LPCOLESTR как аргумент и есть член BSTR (), чтобы получить представление BSTR:

CComBSTR b( yourolestring )
// b.BSTR()

CComBSTR будет обрабатывать распределение / освобождение, поэтому нет риска утечки памяти.

...