我处于一个COM对象,仅在C ++代码中需要使用COM对象。 COM对象具有接受SAFEARRAYs作为传递字节数组的参数的函数。在查看了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,它更容易,更简单,访问元素的方式几乎与常规数组/向量相同。

如果您使用密集使用COleSafeArray参数的OLE自动化接口,有时VARIANT可能更可取。使用Visual Basic组件等自动执行MS Office。在这种情况下,为了与CComSafeArray进行比较,您需要将其手动包装到/从VARIANT对象中解包。

关于c++ - COleSafeArray与CComSafeArray,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13296910/

10-12 14:51