任何快速方法将std :: vector转换为CComSafeArray

时间:2012-11-07 16:18:46

标签: c++ stdvector safearray

有没有快速方法将std :: vector转换为CComSafeArray。我目前正在编写一段代码,基本上将5或6个向量转换为CComSafeArray(不在迭代中)。其中,出现了大块代码(释放旧空间,创建新的安全阵列,复制)。我真的希望我能轻易转换它。

由于我们可以编写一个方法来进行这种转换,我实际上是在寻找位于图书馆角落的有用功能等等。非常感谢你的帮助!

1 个答案:

答案 0 :(得分: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。