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 的迭代器,之后您可以调用CComSafeArray::Attach以将 SAFEARRAY 分配给 CComSafeArray。

于 2013-12-31T05:12:47.680 回答