有什么快速的方法可以将 std::vector 转换为 CComSafeArray。我目前正在编写一段代码,它基本上将 5 或 6 个向量转换为 CComSafeArray(不是在迭代中)。其中,一大块代码(释放旧空间,创建新的安全数组,复制)出现了。我真的希望我可以轻松地转换它。
由于我们可以编写一种方法来进行这种转换,我实际上正在寻找位于图书馆等角落的有用功能。非常感谢您的帮助!
这应该将向量的内容直接复制到底层 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。