Как он конвертирует _bstr_t в BSTR при передаче в качестве аргумента? - PullRequest
2 голосов
/ 29 сентября 2011

Возьмем простой пример:

_bstr_t smartString(L"MyString");

Process(smartString); // takes BSTR.

Изначально я думал, что в _bstr_t есть оператор BSTR, преобразующий из _bstr_t в BSTR, но, глядя на msdn , такой оператор не определен.

Как это работает, когда передается _bstr_t для параметра BSTR или _variant_t для VARIANT?

Ответы [ 2 ]

3 голосов
/ 29 сентября 2011

BSTR имеет значение typedef ed, равное WCHAR* (файл wtypes.h), а значение typedef ed равно wchar_t* (файл winnt.h), а _bstr_t имеет operator wchar_t*() переменная-член. Таким образом, компилятор просто использует этот оператор для преобразования.

0 голосов
/ 26 июля 2017

Если я правильно понимаю вашу проблему, вы хотите вызвать метод, который ожидает BSTR *.Не существует неявного преобразования.Вместо этого используйте параметр GetAddress () для преобразования.

void foo( BSTR* ) {...}

void f()
{
   _bstr_t myBstr;
   foo( myBstr.GetAddress() );
}
...