{
DISPID dispid;
WCHAR * name=L"TextMatrix";
pDisp->GetIDsOfNames(IID_NULL,&name,1,LOCALE_SYSTEM_DEFAULT,&dispid);
DISPPARAMS dispparams;
DISPID mydispid[1] = { DISPID_PROPERTYPUT };
VARIANTARG vararg[3]; // Три параметра
dispparams.rgvarg = vararg;
VariantInit(&dispparams.rgvarg[0]); //Инициализируем первый
dispparams.rgvarg[0].vt = VT_BSTR; // 32-bit integer
dispparams.rgvarg[0].bstrVal = SysAllocString(L"Parameters"); //Размещение системной строки в формате BSTR
VariantInit(&dispparams.rgvarg[1]);//Инициализируем второй
dispparams.rgvarg[1].vt = VT_I4; // 32-bit integer для номера столбца
dispparams.rgvarg[1].lVal = 0; //Номер столбца
VariantInit(&dispparams.rgvarg[2]);//Инициализирует третий
dispparams.rgvarg[2].vt = VT_I4; // 32-bit integer для номера строки
dispparams.rgvarg[2].lVal = 0; //Номер строки
dispparams.rgdispidNamedArgs = mydispid;
dispparams.cArgs = 3; // Передаем три параметра
dispparams.cNamedArgs = 1;
hr=pDisp->Invoke(dispid, IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_PROPERTYPUT,
&dispparams,NULL,NULL,NULL);
SysFreeString(dispparams.rgvarg[0].bstrVal);//Освобождаем системную строку
}
10. Прочитаем свойство из компонента. В OLE/COM Object Viewer'e находим свойство TextMatrix с флагом propget и определяем количество и типы параметров – их 2 32 битных числа и строка – как возвращаемый параметр (флаги параметра out,retval). Прокомментируем отличающиеся от предыдущих строки
{
DISPID dispid;
WCHAR * name=L"TextMatrix";
pDisp->GetIDsOfNames(IID_NULL,&name,1,LOCALE_SYSTEM_DEFAULT,&dispid);
DISPPARAMS dispparams;
VARIANTARG vararg[2]; // два входных параметра
dispparams.rgvarg = vararg;
VariantInit(&dispparams.rgvarg[0]);
dispparams.rgvarg[0].vt = VT_I4;
dispparams.rgvarg[0].lVal = 1;
VariantInit(&dispparams.rgvarg[1]);
dispparams.rgvarg[1].vt = VT_I4;
dispparams.rgvarg[1].lVal = 0;
dispparams.cArgs = 2; //Два входных параметра
dispparams.cNamedArgs = 0; // свойство мы не изменяем – параметров для DISP_PROPERTYPUT - 0
VARIANT varRez; //Переменная вариантного типа для возвращаемого значения
hr=pDisp->Invoke(dispid, IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_PROPERTYGET,
&dispparams,
&varRez, // Указываем в какую переменную возвращать значение
NULL,NULL);
if(varRez.vt==VT_BSTR) //Если получена строка – выводим ее
::MessageBoxW(m_hWnd,varRez.bstrVal,L"Cell text",MB_OK);
}
pDisp->Release(); //Освобождаем интерфейс
}
11.Запускаем программу и тестируем приложение(рис.24).
Рис.24
Индивидуальное задание.
Тремя методами обеспечить обмен данными собственного приложения с компонентом, указанным преподавателем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.