COM自动化结构与它们的包装器

问题描述:

我正在开发用于Windows API的COM包装器,它可以从没有本机Windows API支持的脚本语言中使用。所以我想在COM ATL项目中应该使用什么。 SAFEARRAYCComSafeArrayVARIANTCComVariant?或者任何其他结构或适当的包装?COM自动化结构与它们的包装器

我使用这两种类型进行了测试,但没有发现任何特殊的性能差异,使用问题或在它们之间找到的其他实现。

哪一个最适合在COM ATL项目中使用?例如,SAFEARRAYCComSafeArray

+3

哇倒回1999年。我希望我记得! –

+1

封装程序可以帮助您实现相同的效果,但效率更低,准确性更高,因此您显然应该在ATL代码中使用它们。 –

接口和coclasses必须使用SAFEARRAYVARIANT。您不能拥有在其任何COM公用方法签名或属性中使用CComSafeArrayCComVariant的COM接口或对象。但是,您可以使用在共同类实现中使用CComSafeArrayCComVariant

+2

FWIW:我更喜欢'variant_t'('_variant_t'](https://msdn.microsoft.com/en-us/library/x295h94e.aspx))的别名到'CComVariant',但那是因为我讨厌ATL 。 :) –

+0

在C++中使用ATL项目有什么缺点? – GTAVLover

+1

@GTAVLover:使用ATL的缺点,还是'variant_t'而不是'CComVariant'的缺点? ATL答案:我已经在C++(和其他语言)中使用了大约20年的COM,所以我百分之百顺利地开发了自己的实现,这比我的特定项目的ATL更直接。 'variant_t'回答:可能有些情况下ATL需要一个'CComVariant',所以可能需要一些翻译代码。但'variant_t'有很多优点 - 它非常轻便,完全内联,代码非常易于阅读和理解。 –