Здравствуйте.
На входе в функцию получаю массив GUID'ов и его размер, далее его надо передать в функцию в виде указателя на VARIANT, содержащего массив SAFEARRAY элементов типа BSTR, значения элементов — те же самые GUID'ы. Делаю вот так:
HRESULT SomeFunc(VARIANT*);
HRESULT OtherFunc(const GUID* pElems, std::size_t nElem)
{
std::vector<CComBSTR> bsvecElems(nElem);
CComSafeArray<BSTR> saElems;
for(std::size_t i = 0 ; i < nElem ; ++i)
{
CComBSTR bsItem = pElems[i];
bsvecElems.push_back(bsItem);
saElems.Add(bsItem);
}
CComVariant svElems(saElems);
return SomeFunc(&svElems);
}
При помощи вектора CComBSTR-строк я пытаюсь гарантировать время их жизни, чтобы в функцию SomeFunc передавались валидные строки.
Вопрос такой. Можно сделать все проще?