Re: Получение СОМ объектом таблицы значений из 1С
От: Vi2 Удмуртия http://www.adem.ru
Дата: 16.10.08 05:22
Оценка: 3 (1)
Здравствуйте, Kolhoznic, Вы писали:

K>STDMETHODIMP ХХХ::SendTable(/*in*/VARIANT Table1C,/* out retval*/VARIANT* ResultOfOperation)
K>{
K>/* В Table1C приходит указатель на IDispatch*/
K>return S_OK;
K>}

K>Работа с переменными и строками проблемм не вызывает а вот с таблицей....
K>Как можно достать значения из передаваемой таблице ? Какие методы интерфейса вызвать? Подскажите ПЛС...

Для этого есть класс CComDispatchDriver с методами GetProperty/PutProperty для работы со свойствами и Invoke0/Invoke1/Invoke2/InvokeN для работы с методами объекта:
if( (Table1C.vt & ~VT_BYREF) == VT_DISPATCH )
{
    CComDispatchDriver spTable( (Table1C.vt & VT_BYREF) ? *Table1C.ppdispVal : Table1C.pdispVal );
...
//Vi2-например:    CComVariant v;
//                 hr = spTable.GetProperty(DISPID_VALUE, &v);

Если уверен и знаешь интерфейс объекта, стоящий за IDispatch, запрашивай его и работай как с обычным интерфейсом:
if( (Table1C.vt & ~VT_BYREF) == VT_DISPATCH )
{
    CComQIPtr<ITable> spTable( (Table1C.vt & VT_BYREF) ? *Table1C.ppdispVal : Table1C.pdispVal );

//Vi2-например:    spTable->Item(...);
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.