Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №1

.docx
Скачиваний:
26
Добавлен:
06.05.2017
Размер:
63.11 Кб
Скачать

Симоненко В.С.

ИТ 13-2

Лабораторная работа №1

Создание и использование внутрипроцессного COM-сервера

Цель: получить навыки создания внутрипроцессного СОМ-сервера и СОМ-клиента.

Ход работы

  1. Создать внутрипроцессный сервер в виде динамической библиотеки, для чего выбрать на странице ActiveX Репозитория Delphi значок ActiveX Library, в результате чего будет создан новый проект DLL-библиотеки.

  2. Из Репозитория выбрать значок COM Object на странице ActiveX. В результате будет открыт диалог установки начальных параметров нового объекта: в поле ввода текста Class Name необходимо ввести имя нового класса (например, New), выбор в списке Instancing в данном случае не имеет значения, выбор в списке Threading Model – желательно Apartment, флажок «Include Type Library» необходимо выключить.

  3. Создать новый модуль, в котором выполнить описание интерфейса СОМ-объекта.

  4. Выполнить реализацию методов интерфейса согласно индивидуальному заданию.

  5. Откомпилировать СОМ-сервер в виде DLL-библиотеки. Зарегистрировать сервер в реестре операционной системы с помощью команды «RegSvr32».

  6. Создать проект клиентского приложения, реализующего функциональность согласно индивидуального задания и вызывающего методы созданного СОМ-сервера. Добавьте в него созданный ранее модуль, содержащий описание разработанного интерфейса. Для вызова СОМ-сервера необходимо использовать стандартную функцию

function CreateComObject(var ClassID: TGUID): IInterface;

  1. В ходе защиты лабораторной работы необходимо продемонстрировать знания основ технологии СОМ, классов и интерфейсов, создаваемых при ее реализации.

Индивидуальные задания

Разработать СОМ-сервер, реализующий вычисление значения заданной функции в точке. Разработать клиентское приложение, осуществляющее построение графика функции на отрезке.

16

[1; 10]

Листинг программы

Интерфейс:

unit IInterface;

interface

const

CLSID_ComServer: TGUID = '{20C5F9EA-C37B-4AB0-97DD-B25D7CB0C15F}';

VIProgID_ComServer = 'DelphiKingdom.ComServer';

ProgID_ComServer = VIProgID_ComServer + '.1';

IID_IComServer: TGUID = '{E2ACAA85-9108-4736-9583-92D0EE16A764}';

type

IComServer = interface(IUnknown)

['{E2ACAA85-9108-4736-9583-92D0EE16A764}']

function F(x:Double):Double; stdcall;

end;

implementation

end.

COM-Сервер:

unit Main;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses

Windows, ActiveX, Classes, Math, ComObj, IInterface;

type

TComClass = class(TComObject, IComServer)

public

function F(x:Double):Double; stdcall;

end;

const

Class_ComClass: TGUID = '{D20367C9-1903-4FC9-AA46-60108184362B}';

implementation

uses ComServ;

function TComClass.F(x:Double):Double;

begin

F:=sqrt(1+sqrt(x));

end;

initialization

TComObjectFactory.Create(ComServer, TComClass, Class_ComClass,

'ComClass', '', ciMultiInstance, tmApartment);

Регистрация Com-Сервера:

COM-Клиент:

unit Main;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ComObj, IInterface, TeEngine, Series, ExtCtrls, TeeProcs,

Chart, DbChart, XPMan;

type

TForm1 = class(TForm)

Button1: TButton;

DBChart1: TDBChart;

Series1: TLineSeries;

Memo1: TMemo;

Label1: TLabel;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

FSimpleInstance: IComServer;

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

const

Class_ComClass: TGUID = '{D20367C9-1903-4FC9-AA46-60108184362B}';

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

FSimpleInstance := CreateComObject(Class_ComClass) as IComServer;

if FSimpleInstance = nil then

ShowMessage('Сервер не найден');

Exit;

end;

procedure TForm1.Button1Click(Sender: TObject);

var x:Integer; y:Double;

begin

for x:=1 to 10 do

begin

y:= FSimpleInstance.F(x);

Memo1.Lines.Add('x='+IntToStr(x)+'; y='+FloatToStr(y)+';');

Series1.AddXY(x,y,'',clGreen);

end;

end;

end.

Результат работы:

Вывод: на примере данной лабораторной работы получил навыки создания внутрипроцессного СОМ-сервера и СОМ-клиента.