COM C++ IDispatch Invoke
От: fuxx Россия  
Дата: 02.06.04 19:38
Оценка:
Вопрос вот какой:
Есть функция которую хочется вызвать при помощи 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, &params, NULL, 0, 0 );
if ( !SUCCEEDED ( hr ) )
{
     throw "Function failed";
}


// Проблема в том, что здесь Args[1].vt is VT_EMPTY
PrintValue ( Args[1] );

Вопрос значит такой — как из C++ получать значения [out] параметров при вызове через
IDispatch?
Сергей
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.