我的情况是我有一个 COM 对象,我需要在 come 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?
是否有任何值得研究的开源实现?
各自的优缺点是什么?
最佳答案
从类名上可以看出区别。
MFC COleSafeArray
旨在支持 OLE 自动化,实际上是 OLE VARIANT
结构(可以包含 SAFEARRAY
)的包装器。它通常适用于数组元素,因为它们属于 VARIANT
类型,因此您需要手动选择和提取适当的类型。
ATL CComSafeArray
旨在支持通用 COM 的 SAFEARRAY
,实际上是 SAFEARRAY
结构的包装器。它是用数组元素类型参数化的模板类。
一般来说,您应该使用 CComSafeArray
,它更容易和更简单,访问元素的方式几乎与常规数组/vector 相同。
VARIANT
参数的 OLE 自动化接口(interface),例如 COleSafeArray
有时可能更可取自动化 MS Office,使用 Visual Basic 组件等。在这种情况下,为了与 CComSafeArray
进行比较,您需要手动将其包装/解包到 VARIANT
对象。
关于c++ - COleSafeArray 与 CComSafeArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13296910/