![](/user_photo/2706_HbeT2.jpg)
- •Кафедра кит контрольная работа по дисциплине "Системное программирование"
- •Краматорск 2011 Задание №1
- •Задание №2
- •Задание №3
- •Решение
- •Задание №4 Обмен данными между приложениями с использованием технологии динамического обмена данными с помощью сокетов
- •Решение
- •Задание № 5 Обмен данными между приложениями с использованием технологии динамического обмена данными с помощью именованных каналов
- •Задание №6 Использование технологии сом при разработке приложений в Delphi. Создание и использование внутреннего сервера
Задание №6 Использование технологии сом при разработке приложений в Delphi. Создание и использование внутреннего сервера
Цель работы: получить навыки создания внутреннего сервера и клиентов СОМ при разработке приложений в Delphi.
Индивидуальное задание: Создать внутренний сервер COM и реализовать функции в соответствии с заданными WinAPI. Создать клиентское приложение, которое взаимодействует с внутренним сервером COM.
Решение
-
Создадим внутренний COM сервер:в виде динамической библиотеки, для чего выбрем на странице ActiveX Репозитория Builder C++ значок ActiveX Library, в результате чего будет создан новый проект DLL-библиотеки.
-
Из Репозитория выберем значок COM Object на странице ActiveX. В результате будет открыт диалог установки начальных параметров нового объекта: в поле ввода текста Class Name необходимо введем имя нового класса (например, New), выбор в списке Instancing в данном случае не имеет значения, выбор в списке Threading Model – Apartment, флажок Include Type Library необходимо включить.
-
После закрытия предыдущего диалога появится окно редактирования библиотеки типов (Type Library), в котором в левой части будет представлено иерархическое дерево модулей, объектов и интерфейсов данного сервера, а в правой части – закладки с их свойствами. Интерфейс INew, наследник интерфейса IUnknown, будет создан автоматически. Щелчком правой кнопки мыши на интерфейсе создать метод (функцию), при необходимости задать на закладке Parameters с помощью кнопки Add параметры, которые необходимо в функцию передавать при ее вызове. При внесении изменений в библиотеку типов автоматически будут вноситься изменения в основной модуль проекта в разделе описания класса TNew (будут добавлены объявления методов) и в разделе реализации (будут добавлены заготовки методов). Вариант библиотеки типов на С++ сохраняется в файле с расширением CPP и окончанием _TLB в названии. Введем тела созданных методов. Добавим функции GetCurrentDirectory() и SystemTimeToFileTime().Откомпилируем созданную DLL-библиотеку. Зарегистрируем созданные структуры данных и библиотеку типов в реестре ОС с помощью кнопки Register Type Library редактора библиотеки типов или с помощью команды Register ActiveX Server меню Run Builder C++. После вызова такая динамическая библиотека подгружается и работает как внутренний сервер СОМ.
Вид окна интерфейса *.tlb
C описанием функций:
STDMETHODIMP TGetsImpl::GetDirectory(unsigned_char* File)
{
unsigned char s[80];
GetCurrentDirectory(80,s);
File = s;
}
STDMETHODIMP TGetsImpl::SystemTime(VARIANT SysTime, VARIANT* FileTime)
{
GetLocalTime(SysTime);
SystemTimeToFileTime(&SysTime,&FileTime);
}
Создадим клиента и добавим следующий код
public: // User declarations
__fastcall TForm6(TComponent* Owner);
TCOMIGets getdata;
В отработчик событий:
void __fastcall TForm6::Button1Click(TObject *Sender)
{
unsigned char *s;
getdata = CoGets::Create();
getdata.GetDirectory(s);
Edit1->Text = *s;
}
void __fastcall TForm6::Button2Click(TObject *Sender)
{
FILETIME time;
getdata.SystemTime(SYSTEMTIME Stime,time);
Edit2->Text = time.dwHighDateTime;
Edit3->Text = time.dwLowDateTime;
}
Результат клиента:
Вывод: технология СOM широко используется практически во всех приложений и обеспечивает удобный механизм обмена данными основными характеристиками является инкапсуляция и полиморфизм. COM поддерживает двоичный стандарт что позволяет использовать любой язык для доступа к библиотеке.
Список используемой литературы:
-
Саймон, Р. Windows 2000 API. Энциклопедия программиста. – К.-СПб.: ООО «ДиаСофтЮП», 2002. – 1088 с. – ISBN 966-7393-71-2
-
Андреев, Г.И. Microsoft Windows 2000, Server и Professional. Русские версии / Под общей ред. А.Н. Чемкарёва и Д.Б.Вишнякова. – СПб.: БХВ-Петербург, 2002 – 1056 с. – ISBN 5-8206-0107-6
-
Андреев, Г.А. Мicrosoft Windows XP. Руководство администратора / Под общ. ред. А.М. Чемкарёва. – СПб.: БХВ-Петербург, 2002. – 848 с. – ISBN 5-94157-168-2
-
Джонсон, М. Системное программирование в среде Win 32. – М.-СПб.- К.: Издательский дом «Вильямс», 2001. – 464 с. – ISBN 5-8459-0177-4
-
Роман, C. Программирование в Win 32 API на Visual Basic: Пер с англ. – М.: ДМК Пресс 2001. – 480 с. – ISBN 5-94074-102-9
-
Фаронов, В.В. Программирование баз данных в Delphi 7. – СПб.: Питер, 2006. – 459 с. – ISBN 5-318-00100-9
-
Елманова, Н. Delphi и технология COM. Мастер-класс. / Н. Елманова, С. Трепалин, А. Тенцер. – СПб.: Питер, 2003. – 704 с. – ISBN 5-94723-648-6
-
Архангельский А.Я. Программирование в Builder C++ 6 – Москва Издательство Бином, 2003