[英]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.