COleSafeArray与CComSafeArray

时间:2012-11-08 20:07:31

标签: c++ windows com mfc

我遇到的情况是我有一个COM对象,我需要在windows中使用C ++代码。 COM对象具有接受SAFEARRAY作为传递字节数组的参数的函数。在查看SAFEARRAY API(http://msdn.microsoft.com/en-us/library/windows/desktop/ms221145(v=vs.85).aspx)后,我认为它不是我想要的,我应该找到一个面向对象的包装器。我试着寻找开源的,但我找不到。我发现微软已经创建了两个似乎封装了SAFEARRAY的对象。看起来CComSafeArray正是我所需要的,就像COleSafeArray可能有用,但只能用于传统的兼容性。

COleSafeArray是否只是为了历史兼容性或者我缺少什么?

什么时候应该使用COleSafeArray而不是CComSafeArray?

是否有任何可能值得研究的开源实现?

每个人的优点和缺点是什么?

1 个答案:

答案 0 :(得分:1)

从班级名称来看,差异很明显。

MFC COleSafeArray旨在支持OLE自动化,实际上是OLE VARIANT struct(可以包含SAFEARRAY)的包装器。它通常适用于VARIANT类型的数组元素,因此您需要选择&手动提取合适的类型。

ATL CComSafeArray旨在支持通用COM的SAFEARRAY,实际上是SAFEARRAY struct的包装器。它是使用数组元素类型进行参数化的模板类。

一般来说,你应该使用CComSafeArray,它更容易和更简单,访问元素几乎与常规数组/向量相同。

如果使用集中使用COleSafeArray参数的OLE自动化接口,有时候

VARIANT可能更好。使用Visual Basic组件等自动化MS Office。对于这种情况与CComSafeArray的比较,您需要手动将其打包/解包到VARIANT对象。