簡體   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