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.
Так как указано перед классами, предоставляют больше методов и т. д.