2

std::vector を CComSafeArray に変換する簡単な方法はありますか。私は現在、基本的に 5 または 6 ベクトルを CComSafeArray に変換するコードを作成しています (反復ではありません)。その中で、コードの大きなブロック(古いスペースの解放、新しいセーフアレイの作成、コピー)が出現します。簡単に変換できるといいのですが。

この変換を行うメソッドを書くことができるので、ライブラリなどの隅にある便利な関数を実際に探しています。

4

1 に答える 1

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 アルゴリズムを使用する場合は、SAFEARRAY の上に STL 準拠の反復子を提供するソリューションが少なくとも1 つあります。その後CComSafeArray::Attach、SAFEARRAY を CComSafeArray に割り当てるために呼び出すことができます。

于 2013-12-31T05:12:47.680 に答える