Как преобразовать символ * в BSTR?

Вы можете сделать следующее:

selector: 'app-name',
templateUrl: './component_name.component.html',
styleUrls: ['./component_name.component.css']
21
задан 28 January 2013 в 15:33
поделиться

3 ответа

Назовите MultiByteToWideChar (), тогда любой SysAllocString () или SysAllocStringLen ().

не забывают называть SysFreeString (), когда Вам больше не нужен BSTR.

Подробно (SysAllocStringLen () вариант †“это короче и быстрее):

  1. Вызов MultiByteToWideChar () и передача 0 как пятые и шестые параметры. Это возвратит количество символов в Unicode, эквивалентном из строки ANSI. Помните, строка ANSI может содержать любые символы, не только ASCII, таким образом, любые попытки вручную вычислить количество символов Unicode, учитывая длину строки ANSI могут работать в некоторых случаях и не работать в других.

  2. Выделяют буфер для BSTR с SysAllocStringLen (). Передайте 0 как первый параметр и количество символов Unicode как второй параметр. Вы теперь имеете правильно выделенный, но деинициализировали BSTR. Это уже имеет место для конечного нуля, и этот конечный нуль правильно помещается.

  3. Вызов MultiByteToWideChar () во второй раз и на этот раз передают выделенный BSTR туда. Функция преобразует строку в Unicode и скопирует результат в BSTR. Теперь у Вас есть выделенный BSTR propely, содержащий Unicode, эквивалентный из Вашей строки ANSI.

  4. Передача BSTR в VB. Наслаждаться.

  5. Вызов SysFreeString () для освобождения BSTR.

22
ответ дан 16 October 2019 в 23:39
поделиться

Используйте _bstr_t:

_bstr_t bstrt(buffer);

Вот Святой Грааль статей преобразования строк

22
ответ дан 16 October 2019 в 23:39
поделиться

У меня нет возражения на ответ ajryan, но вот альтернатива...

SysAllocString определяется для взятия параметра типа OLECHAR *. Вы даете ему символ *. Это не то же самое. Существуют определенные обстоятельства, когда они могли бы быть тем же самым, но Вы не можете зависеть от него. Таким образом, в первую очередь, необходимо преобразовать символ * в OLECHAR *. Существует макрос по имени A2OLE, который может сделать это для Вас, и в тех случаях, где символ * и OLECHAR * является тем же самым, макро-компиляции далеко ни к чему (я думаю).

См. эта страница для деталей A2OLE и его друзей.

, О, и кастинг Вашего символа * к BSTR на самом деле не изменяет его вообще, это ни BSTR, ни OLECHAR *.

2
ответ дан 16 October 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: