Тогда пробую по другому и так 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, но массив пуст... Это метод глючит или я что то неправильно делаю... ???