SafeArrayPutElement возвращает E_OUTOFMEMORY
От: apilikov Россия  
Дата: 15.06.07 16:40
Оценка:
уважаемые господа!
задам идиотский вопрос однако немного не понимаю что происходит.
я пишу плагин к кад-системе SolidWorks, функция выглядит так.


STDMETHODIMP CGSSWLink2006Server::GetListFeatures(BSTR DocumentName,SAFEARRAY** pArray,ErrorEnum *lError)
{
    if (CheckLicenseInfo() != E_NO_ERROR)
    {
        *lError = E_LICENSE_ERROR;
        return S_OK;
    }
    //получили документ
    IModelDoc2Ptr pDocument = CheckDocumentIsInSession(DocumentName);
    if (pDocument == NULL) 
    {
        *lError = E_STATUS_DOCUMENT_NOT_VALID;
        return S_OK;
    }
    try
    {
        IFeaturePtr swFeat = NULL;
        std::vector<CString> vFtNames;
        HRESULT hr = pDocument->IFirstFeature(&swFeat);
        while(swFeat != NULL)
        {
            CComBSTR sbsFtName;
            HRESULT hr=swFeat->get_Name(&sbsFtName);
            if(IsSolidOrSheetMetalFeature(swFeat))//если это не какая-то хрень типа плоскости а действительно фичер добавляем его в массив
                vFtNames.push_back((BSTR)sbsFtName);
            IFeaturePtr swNextFeature = NULL;
            hr = swFeat->IGetNextFeature(&swNextFeature);
            swFeat = swNextFeature;
        }
        if(vFtNames.empty())//если массив пустой значит нет ни одного фичера.
            return E_FEATURES_NOT_FOUND;
        //создаем safearray
        SAFEARRAYBOUND saBound[1];
        saBound[0].cElements = (ULONG)vFtNames.size();
        saBound[0].lLbound = 0;
        *pArray = SafeArrayCreate(VT_BSTR, 1, saBound);
        VARIANT Variant;
        memset(&Variant,0,sizeof(VARIANT));
        Variant.vt=VT_BSTR;
        for(UINT i=0;i<vFtNames.size();i++)
        {
            long lIndex=i;
            Variant.bstrVal=vFtNames.at(i).AllocSysString();
            hr = SafeArrayPutElement(*pArray, &lIndex, &Variant);
        }
        return E_NO_ERROR;
    }
    catch(_com_error&)
    {
        *lError = E_LIST_FEATURES_ERROR;
        return S_OK;
    }
}


глючный код выделен жирным шрифтом.
господа, подскажите пожалуйста может кто знает в чем тут дело.



16.06.07 18:23: Перенесено модератором из 'C/C++' — Павел Кузнецов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.