2012-11-07 49 views
1

是否有任何將std :: vector轉換爲CComSafeArray的快速方法。我目前正在寫一段代碼,基本上將5或6個矢量轉換爲CComSafeArray(不是迭代)。其中,大塊代碼(釋放舊空間,創建新的safearray,複製)出現。我真的希望我可以輕鬆地將其轉換。任何將std :: vector轉換爲CComSafeArray的快速方法

因爲我們可以編寫一個方法來做這個轉換,我實際上是在尋找位於圖書館角落的有用函數等。非常感謝您的幫助!

+0

那麼你可以問Stack Overflow。這很快。 –

+0

是否有一個類型爲你的向量<>,或者你在尋找一個通用的解決方案(在這一點上我有點自信不存在)?即你想要這個矢量,矢量等? – WhozCraig

回答

3

這應該將矢量的內容直接複製到底層的SAFEARRAY,假設它們是簡單的類型或指針。

vector<T> vecInput; 

// Create a SAFEARRAY of size elements 
CComSafeArray<T> sa(vecInput.size()); 

// Copy all the contents into the SAFEARRAY 
memcpy(&sa.GetSafeArrayPtr()->pvData[0], &vecInput[0], sizeof(T) * vecInput.size()); 

如果你正在尋找一個通用的解決方案,遍歷向量也適用:

vector<T> vecInput; 

// Create a SAFEARRAY of size elements 
CComSafeArray<T> sa(vecInput.size()); 

// Copy all the contents into the SAFEARRAY 
for (size_t i = 0; i < vecInput.size(); ++i) 
    sa.SetAt(i, vecInput[i]); 

如果你想使用STL的算法,至少還有one solution that provides STL compliant iterators on top of a SAFEARRAY之後,你可以調用CComSafeArray::Attach到將SAFEARRAY分配給CComSafeArray。

相關問題