Вам необходимо использовать SysAllocString (а затем SysFreeString).
BSTR bstr = SysAllocString(pwsz);
// ...
SysFreeString(bstr);
A BSTR
- это управляемая строка с символами строки с префиксом их длины.SysAllocString
выделяет правильный объем памяти и правильно устанавливает длину и содержимое строки.Если BSTR
правильно инициализирован, SysStringLen
должен возвращать правильную длину.
Если вы используете C ++, вы можете рассмотреть возможность использования класса стиля RAII (или даже Microsoft _bstr_t
), чтобыВы не забудете никаких звонков SysFreeString
.