Вызов метода с помощью Invoke содержащий исходящий параметр SAFEARRAY

Есть вот такой метод COM-компоненты описанный на IDL:

        [id(0x0000001a)]
    HRESULT getParamByteArray(
                    [in] long paramId, 
                    [out, retval] SAFEARRAY(unsigned char)* value);

Изначально студия сгенерировала MFC оболочку на основе COleDispatchDriver выглядит примерно так:

SAFEARRAY * getParamByteArray(long paramId)
{
    static BYTE parms[] = VTS_I4;
    InvokeHelper(0x1a, DISPATCH_METHOD, VT_EMPTY, nullptr, parms, paramId);
}

Это неверный код и я попытался это исправить но, получил S_OK и пустой массив SAFEARRAY:

    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;
}

Каким образом правильно получить этот массив?


Ответы (0 шт):