我遇到的情况是我有一个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?
是否有任何可能值得研究的开源实现?
每个人的优点和缺点是什么?
答案 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
对象。