Re[2]: Получение СОМ объектом таблицы значений из 1С
От: Kolhoznic  
Дата: 16.10.08 07:41
Оценка:
Здравствуйте, 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
                       }
       }

Вот такая ситуация ....
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.