我有一个返回 BSTR 的安全数组的电话。我想把它复制到一个vector<LPOLESTR>
. 正确的方法是什么?在这种情况下如何处理内存?
问问题
2063 次
1 回答
2
假设您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);
错误处理留给读者练习。
于 2014-03-03T15:57:16.070 回答