Работа с COM/ATL типами
От: Аноним  
Дата: 16.11.09 14:52
Оценка:
Здравствуйте.
На входе в функцию получаю массив 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 передавались валидные строки.

Вопрос такой. Можно сделать все проще?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.