繁体   English   中英

COleSafeArray与CComSafeArray

[英]COleSafeArray vs CComSafeArray

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM