CComVariant与_variant_t,CComBSTR与_bstr_t

Rob*_*Rob 18 c++ com atl

我使用ATL(VS2008,所以ATL9 IIRC)来创建COM对象,并一直使用CComVariant类(定义atlcomcli.h)来管理VARIANT类型.但是,还有一个VARIANT名为的包装器_variant_t.是否有任何区别CComVariant,并_variant_t和我应该使用哪一个?

同样,有两个BSTR包装器 - CComBSTR_bstr_t.再说一次,我应该选择哪个?为什么?

JBR*_*son 16

_variant_t和_bstr_t由编译器提供为COM支持类, 并在使用#import等结构时使用.如果您愿意,可以使用它们.

CComVariant和CComBSTR由ATL库提供.

是否使用COM支持类或ATL类取决于您.如果您经常需要执行附加到"原始"BSTR或VARIANT的操作,则COM支持类可能是更安全的选择.

存在一些行为差异(检查文档),其中最重要的似乎是COM支持类在出现故障时会抛出_com_error和异常.如果您不想进行异常处理,请使用ATL类.


Kim*_*man 7

一个主要的区别是ATL的类不会抛出异常,而编译器支持类会(_com_exception特别是).

_bstr_t是引用计数而CComBSTR更多是原始包装.

  • +1我会说这是关键的区别.使用ATL,您必须编写许多额外的错误检查代码.另一方面,如果你不想打扰异常,你应该更喜欢ATL课程. (2认同)