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