2009-08-01 2 views

ответ

5

LPCOLESTR просто const wchar_t*, так что вы можете использовать SysAllocString() создать BSTR:

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

Обязательно позвоните SysFreeString(), когда вы сделали с вашей BSTR , См. Также MSDN documentation on BSTRs

+0

Обратите внимание, что OLECHAR == wchar_t действует только на платформе Wintel. Не уверен, что такое другие платформы, но это были забавные вещи, и на них BSTR, вероятно, просто символ *, так что ваш ответ правильный для всех практических целей;) – peterchen

1

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

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

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

CComBSTR будет обрабатывать Allocating/не освободив таким образом отсутствует риск утечки памяти.

Смежные вопросы