将STD ::向量转换为ccomsafearray的任何快速方法

Any quick way to convert std::vector to CComSafeArray

本文关键字:任何快 ccomsafearray 方法 STD 向量 转换      更新时间:2023-10-16

是否有任何快速方法将std :: vector转换为ccomsafearray。我目前正在编写一件代码,该代码基本上将5或6个向量转换为Ccomsafearray(不在迭代中)。其中,大量代码(释放旧空间,创建新的Safearray,复制)出现。我真的希望我可以轻松转换。

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

这应该将向量的内容复制到基础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的迭代器,然后您可以致电CComSafeArray::Attach将SafeArray分配给CCOMSAFEARRAY。

相关文章: