При создании BSTR
(с использованием _bstr_t
в качестве класса-оболочки) я должен использовать некоторые из constructors of _bstr_t
. Поскольку BSTR
является строкой с префиксом длины, которая может содержать нулевые символы, должна быть возможность создать такую строку, используя собственную строку, не полагаясь на нулевое завершение данной исходной строки.Как установить длину при создании BSTR (используя обертку _bstr_t) с помощью собственной строки?
Для примера:
wchar_t* pwNativeString = L"abc\0def\0\0ghi\0\0\0"; // + automatic "\0"
// Now I want to create a BSTR using _bstr_t by this string.
_bstr_t spBSTR = _bstr_t(pwNativeString);
Проблема заключается в том, что конструктор опирается на нуль-прекращения pwNativeString
. Таким образом, итоговый BSTR
- это всего лишь "abc"
и ничего более. Так что мой вопрос: Как создать BSTR
или _bstr_t
и доставить указатель на массив с определенной длиной? В следующем примере псевдокода:
_bstr_t spBSTR = _bstr_t(pwNativeString, 15);
Кстати, вы знаете, где хранится длина? Является ли он частью массива символов? Это структура или что это такое? –
Кстати, для этого я буду использовать этот макрос, если он кому-то поможет: '#define _bstr_t_create (str, len) _bstr_t (SysAllocStringLen (str, len), false)' –
Длина сохраняется в файле, определенного местоположением, определяемым ОС. Это обычно в четырех байтах, непосредственно предшествующих первому символу строки, но вместо того, чтобы предполагать, вы можете просто вызвать 'SysStringLen'. –