2017-07-25 48 views
1

我正在開發用於Windows API的COM包裝器,它可以從沒有本機Windows API支持的腳本語言中使用。所以我想在COM ATL項目中應該使用什麼。 SAFEARRAYCComSafeArrayVARIANTCComVariant?或者任何其他結構或適當的包裝?COM自動化結構與它們的包裝器

我使用這兩種類型進行了測試,但沒有發現任何特殊的性能差異,使用問題或在它們之間找到的其他實現。

哪一個最適合在COM ATL項目中使用?例如,SAFEARRAYCComSafeArray

+3

哇倒回1999年。我希望我記得! –

+1

封裝程序可以幫助您實現相同的效果,但效率更低,準確性更高,因此您顯然應該在ATL代碼中使用它們。 –

回答

3

接口和coclasses必須使用SAFEARRAYVARIANT。您不能擁有在其任何COM公用方法簽名或屬性中使用CComSafeArrayCComVariant的COM接口或對象。但是,您可以使用在共同類實現中使用CComSafeArrayCComVariant

+2

FWIW:我更喜歡'variant_t'('_variant_t'](https://msdn.microsoft.com/en-us/library/x295h94e.aspx))的別名到'CComVariant',但那是因爲我討厭ATL 。 :) –

+0

在C++中使用ATL項目有什麼缺點? – GTAVLover

+1

@GTAVLover:使用ATL的缺點,還是'variant_t'而不是'CComVariant'的缺點? ATL答案:我已經在C++(和其他語言)中使用了大約20年的COM,所以我百分之百順利地開發了自己的實現,這比我的特定項目的ATL更直接。 'variant_t'回答:可能有些情況下ATL需要一個'CComVariant',所以可能需要一些翻譯代碼。但'variant_t'有很多優點 - 它非常輕便,完全內聯,代碼非常易於閱讀和理解。 –