2
BSTR의 safearray를 반환하는 호출이 있습니다. vector<LPOLESTR>
에 복사하고 싶습니다. 올바른 방법은 무엇입니까? 이 경우 메모리가 어떻게 처리됩니까?safearray에서 벡터로 값을 복사하는 방법은 무엇입니까?
BSTR의 safearray를 반환하는 호출이 있습니다. vector<LPOLESTR>
에 복사하고 싶습니다. 올바른 방법은 무엇입니까? 이 경우 메모리가 어떻게 처리됩니까?safearray에서 벡터로 값을 복사하는 방법은 무엇입니까?
이 같은 의견에 대한 논의 당, 당신은 결국 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);
오류 처리는 독자들에게 운동으로 남아 있습니다.
벡터의 포인터가 모두 가리키는 메모리를 어떻게 할당하고 관리 할 계획입니까? safearray는 BSTR을 소유하고 있으며 자체가 파괴 될 때 할당을 해제합니다. '벡터', 또는 MFC 나 ATL을 사용하고 있다면'벡터 '으로 더 행복 할 것입니다. –
나는 비슷한 라인을 생각하고 있었다. 마침내 벡터와 함께 가기로 결정했다. 내용을 복사하는 알고리즘은 무엇입니까? –
User234