Здравствуйте, 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(...);