Вопрос вот какой:
Есть функция которую хочется вызвать при помощи IDispatch.
Вот прототип:
void GetVariable ( [in] BSTR Name, [out] VARIANT Value );
Делаю так:
HRESULT hr;
DISPPARAMS params;
VARIANTARG Args[2];
BSTR VarName;
VarName = SysAllocString ( Name );
::VariantInit ( &Args[0] );
Args[0].vt = VT_BSTR;
Args[0].bstrVal = VarName;
::VariantInit ( &Args[1] );
// Если здесь Args.vt = VT_BYREF | VT_VARIANT получаю ошибку DISP_E_BADVARTYPE
params.rgvarg = Args;
params.rgdispidNamedArgs = 0;
params.cArgs = 2;
params.cNamedArgs = 0;
hr = dispatch->Invoke ( FuncDispID, IID_NULL, GetUserDefaultLCID(), DISPATCH_METHOD, ¶ms, NULL, 0, 0 );
if ( !SUCCEEDED ( hr ) )
{
throw "Function failed";
}
// Проблема в том, что здесь Args[1].vt is VT_EMPTY
PrintValue ( Args[1] );
Вопрос значит такой — как из C++ получать значения [out] параметров при вызове через
IDispatch?