Вообще говоря, нет, но есть способы сделать их совместимыми в некоторой степени с помощью вспомогательных классов и макросов (см. Ниже).
Основная причина, по которой отображение 1: 1 никогда не будет возможным, заключается в том, что BSTR
(и, следовательно, CComBSTR
может содержать '\0'
в строке, поскольку в конечном итоге это подсчитываемый тип строки.
Наилучшим выбором при использовании C ++ будет использование класса ATL CComBSTR
вместо BSTR
. В любом случае вы можете использовать макросы преобразования ATL / MFC CW2A
и друзья.
Также обратите внимание, что в документации (MSDN) написано:
Рекомендуемый способ конвертации в
и из BSTR
строк использовать
CComBSTR
класс. Чтобы преобразовать в BSTR
,
передать существующую строку в
конструктор CComBSTR
. Преобразовать
от BSTR, используйте
COLE2
[C
] DestinationType [EX
], например
COLE2T
.
... что относится к вашему случаю использования.
См. Ответ Джона Диблинга для альтернативы (_bstr_t
).