Здравствуйте, Vi2, Вы писали:
Vi2>Для этого есть класс CComDispatchDriver с методами GetProperty/PutProperty для работы со свойствами и Invoke0/Invoke1/Invoke2/InvokeN для работы с методами объекта:
Vi2>Vi2>if( (Table1C.vt & ~VT_BYREF) == VT_DISPATCH )
Vi2>{
Vi2> CComDispatchDriver spTable( (Table1C.vt & VT_BYREF) ? *Table1C.ppdispVal : Table1C.pdispVal );
Vi2>...
Vi2>//Vi2-например: CComVariant v;
Vi2>// hr = spTable.GetProperty(DISPID_VALUE, &v);
Vi2>
Vi2>Если уверен и знаешь интерфейс объекта, стоящий за IDispatch, запрашивай его и работай как с обычным интерфейсом:
Vi2>Vi2>if( (Table1C.vt & ~VT_BYREF) == VT_DISPATCH )
Vi2>{
Vi2> CComQIPtr<ITable> spTable( (Table1C.vt & VT_BYREF) ? *Table1C.ppdispVal : Table1C.pdispVal );
Vi2>//Vi2-например: spTable->Item(...);
Vi2>
Интерфейсы мне не известны попробуем получить их...
CComVariant v;
if( (Table1C.vt & ~VT_BYREF) == VT_DISPATCH )
{
CComDispatchDriver spTable( (Table1C.vt & VT_BYREF) ? *Table1C.ppdispVal : Table1C.pdispVal );
if (FAILED(hr = spTable.GetProperty(DISPID_VALUE, &v)))
{
//Возникает ошибка 0х80020003 - DISP_E_MEMBERNOTFOUND
}
}
Вот такая ситуация ....