Теперь проинспектируйте изменения в окне Class View. Выполните двойной щелчок сначала на методе Say, который расположен внутри класса CSay, а затем повторите эту операцию на элементе Say, который расположен внутри независимого узла ISay. В первом случае вы попадете в файл реализации класса CSay, а во втором — в IDL-файл. В файл Say.cpp надо ввести такой код конструктора.
STDMETHODIMP CSay::Say()
{
USES_CONVERSION;
MessageBox (0, W2A(m_word), "Interface ISay:", MB_OK);
return S_OK;
}
Здесь, благодаря классу CComBSTR и макросам USES_CONVERSION и W2A (с мнемоникой Wide To ANSI), удается вывести сообщение с меньшими усилиями, чем во всех предыдущих вариантах реализации метода Say. Повторите шаги по вводу в интерфейс нового метода и добавьте метод SetWord. При описании параметра необходимо в соответствии с правилами COM уточнить его тип, выбрав в поле Parameter type: BSTR. В поле Parameter name введите: word. Установите, также флажок in, который уточняет тип параметра (входной). Эта информация используется в файле типа IDL.
Не забудьте нажать кнопку Add, а затем Finish. Мастер вставок может наглым образом проигнорировать параметр, если вы забудете нажать Add. В этом случае вам придется ввести исправления вручную. Это надо проделать в трех файлах: Say.h, Say.cpp и ATest.idl.
В файле Say.h должно быть объявление:
STDMETHOD(SetWord)(BSTR word);
В файле Say.cpp коды реализации метода:
STDMETHODIMP CSay::SetWord (BSTR word)
{
m_word = word;
return S_OK;
}
В файле ATest.idl — коды уточненного описания метода:
[helpstring("method SetWord")] HRESULT SetWord([in] BSTR word);
Вновь постройте DLL. Признаком успеха может служить сообщение компоновщика:
Creating library Debug/ATest.lib and object Debug/ATest.exp
Для проверки работы сервера можно воспользоваться последним клиентом SayTLibClient, который был разработан ранее. Но в него необходимо ввести изменения: путь к библиотеке типов нового сервера, а также имя класса. Вместо идентификатора CLSID_CoSay вставьте CLSID_Say. Напомним код клиентского приложения.
#import "D:/ATest/Debug/ATest.tlb" no_namespace named_guids
void main()
{
CoInitialize(0);
ISayPtr pSay(CLSID_Say);
pSay->Say();
pSay->SetWord (L"I obey your will, Master !");
pSay->Say();
pSay = 0;
CoUninitialize();
}
Введите изменения и запустите клиентское приложение. Все должно работать. Другой текст приветствия должен убедить вас в том, что работает новый сервер, а не старый.
Элементы ActiveX (термин, используемый для обозначения одного из исторических этапов развития COM-технологии в Microsoft) должны, как минимум, обладать способностью к активизации на месте, поддерживать OLE Automation, разрешать (как и простые объекты) чтение и запись своих свойств, а также вызов своих методов.
В этой главе мы разработаем DLL-модуль, который после регистрации в системе в качестве COM-объекта, позволит любому другому клиентскому приложению (которое должно обладать свойствами контейнера объектов COM) использовать его для отображения в контексте OpenGL трехмерного графика функции, заданной произвольным массивом чисел.
Данные для графика COM-объект будет брать из файла, на который укажет пользователь клиентского приложения. Кроме этого, объект предоставит клиенту возможность перемещения графика вдоль трех пространственных осей, вращения вокруг вертикальной и горизонтальной осей и просмотра поверхности как в обычном, так и скелетном режиме. Регулируя параметры освещения, пользователь может добиться наибольшей реалистичности изображения, то есть усилить визуальный эффект трехмерного пространства на плоском экране.
Графики представляют результаты расчета какого-либо физического поля, например, они могут быть поверхностями равной температуры, давления, скорости, индукции, напряжения и т. д. в части трехмерного пространства, называемой расчетной областью. Пользователь объекта должен заранее подготовить данные и записать их в определенном формате в файл. Объект по команде пользователя считывает данные, нормирует, масштабирует и изображает их в своем окне, внедренном в окно приложения-клиента. Пользователь, манипулируя мышью, управляет местоположением и вращением графика, а открыв стандартный диалог Properties, изменяет другие его атрибуты.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.