VARIANT ParamNames, ParamValues;
ParamNames.vt = VT_SAFEARRAY;
ParamValues.vt = VT_SAFEARRAY;
spConf->GetParameterCount(&ParamCount);
spConf->GetParameters(&ParamNames, &ParamValues);
for (long j = 0; j < ParamCount; j++)
{
BSTR *ParamName = (BSTR*) ParamNames.parray[j].pvData;
}
SAFEARRAY элемент по индексу
Код:
при j == 0 в ParamName попадает правильно, но если j > 0 тогда <Bad Ptr>
В отладчике MS VS видно что ParamNames.parray содержит много значений и все они индексированы.
Как получить значение по индексу?
ЗЫ: в ParamNames приходят только BSTR строки
решение нашлось
не получается получить строку (приходит <Bad Ptr>)
Цитата:
void SomeFunc (VARIANT pbstrObjectID)
{
BSTR HUGEP *pbstrIDs;
HRESULT hr = SafeArrayAccessData(pbstrObjectID.parray, (void HUGEP**)&pbstrIDs); // в pbstrIDs получается <Bad Ptr>
BSTR bstrID = pbstrIDs[pbstrObjectID.parray->rgsabound->cElements-1];
SafeArrayUnaccessData(pbstrObjectID.parray);
....
}
как исправить?
ЗЫ: компилю в MS VS, и грешу на настройки проекта, т.к. другой проет с таким же кодом работает без проблем.
Ну а ошибка-то SafeArrayAccessData() какая?
Цитата: Phodopus
Ну а ошибка-то SafeArrayAccessData() какая?
S_OK
дело было не в этом, а в том что в SAFEARRAY было не BSTR а VARIANT::VT_BSTR