如何将值从安全数组复制到向量

How to copy values from safearray to vector?

本文关键字:数组 复制 向量 安全      更新时间:2023-10-16

我有一个返回 BSTR 安全数组的调用。我想将其复制到vector<LPOLESTR>.正确的方法是什么?在这种情况下如何处理内存?

假设你想要vector<wstring>毕竟,根据评论中的讨论,像这样:

SAFEARRAY* sa;  // a safearray of BSTR, initialized somehow.
LONG lBound, uBound;
SafeArrayGetLBound(sa, 1, &lBound);
SafeArrayGetUBound(sa, 1, &uBound);
LONG count = uBound - lBound + 1;  // bounds are inclusive
BSTR* raw;
SafeArrayAccessData(sa, (void**)&raw);
vector<wstring> v(raw, raw + count);
// or, if you want to assign to an existing vector
vector<wstring> v;
v.assign(raw, raw + count);
// When no longer need "raw".
SafeArrayUnaccessData(sa);

错误处理留给读者作为练习。