CComVariant и вариант Т CComBSTR и тип BSTR Т

я использую ATL (VS2008, so ATL9 IIRC) для создания COM-объектов и использую CComVariant класса (определена в atlcomcli.h) в управление VARIANT типы. Однако есть и другой VARIANT фантик под названием _variant_t. Есть ли разница между CComVariant и _variant_t и какой из них я должен использовать?

аналогично, есть два BSTR фантики доступен - CComBSTR и _bstr_t. Опять же, что я должен предпочесть и почему?

4 ответов


_variant_t и _bstr_t предоставляются компилятором как классы поддержки COM и используется при использовании таких конструкций, как #import . Вы можете использовать их, если хотите.

CComVariant и CComBSTR предоставляются библиотеки ATL.

используете ли вы классы поддержки COM или классы ATL зависит от вас. Если вам часто нужно выполнять такие операции, как присоединение к " raw " BSTRs или вариантам, классы поддержки COM могут быть более безопасными ставка.

есть некоторые поведенческие различия (проверьте документы), наиболее важным из которых, по-видимому, является то, что классы поддержки COM будут бросать _com_error& exception, когда что-то терпит неудачу. Если вы не хотите выполнять обработку исключений, перейдите к классам ATL.


одним из основных отличий является то, что классы ATL не создают исключений, а классы поддержки компилятора (_com_exception, в частности).

_bstr_t ссылка-засчитано в то время как CComBSTR больше сырых фантик.


Я использую оба в зависимости от задачи. Как указано выше _variant_t и _bstr_t являются более базовыми, тогда как классы ATL более высокого уровня (более хороший аналог MFC). Мой совет-посмотреть немного на определения классов. Все они являются только помощниками для меньшего, лучше читаемого кода, но все еще содержат определенные подводные камни в отношении управления памятью и ссылками на объекты. Поэтому вы должны немного знать о своих внутренних органах, и документация часто не очень это ясно.


BSTR и VARIANT-это типы данных, которые обернуты классами CComBSTR/_bstr_t и ccomvariant/_variant_t.
Так как указано перед классами, предоставляют больше методов и т. д.