Re: Прошу помощи в получении SAFEARRAY с помощью InvokeHelper
От: _agg  
Дата: 22.04.20 10:02
Оценка:
Тогда пробую по другому и так IDL :
HRESULT getParamByteArray(
                        [in] long paramId, 
                        [out, retval] SAFEARRAY(unsigned char)* value);



У COleDispatchDriver есть поле m_lpDispatch типа IDispatch пробуем:
Вызов метода:
CComSafeArray<BYTE> array(1024); 
m_error = p->getParamByteArray(param::LIBFPTR_PARAM_OFD_FISCAL_SIGN, array.GetSafeArrayPtr());

    long getParamByteArray(long paramId, SAFEARRAY **parray) {
        DISPPARAMS dispparams;
        VARIANTARG varArgIn;
        VARIANTARG varArgResult;
        varArgResult.parray =*parray;
        VariantInit(&varArgIn);
        VariantInit(&varArgResult);
        
        V_VT(&varArgIn) = (VT_INT);
        V_VT(&varArgResult) = (VT_ARRAY | VT_UI1);

        memset(&dispparams, 0, sizeof(DISPPARAMS));
        dispparams.rgvarg = &varArgIn;
        dispparams.cArgs = 1;

        UINT nErrArg;
        EXCEPINFO excepinfo;
        HRESULT hr = m_lpDispatch->Invoke(0x1a, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &dispparams, &varArgResult, &excepinfo, &nErrArg);
        return hr;
    }


Запускаем, исключения нет, hr равен S_OK, но массив пуст... Это метод глючит или я что то неправильно делаю... ???
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.