Основы COM-технологий. Артемов М.А. и др. - 25 стр.

UptoLike

Составители: 

4. Ɋɟɚɥɢɡɭɟɦ ɦɟɬɨɞɵ Get_Color ɢ Set_Color:
function TAutoServer.Get_Color: SYSUINT;
begin
result:=Form1.Color;
end;
procedure TAutoServer.Set_Color(Value: SYSUINT);
begin
Form1.Color:=Value;
end;
5. Ɉɬɤɨɦɩɢɥɢɪɭɣɬɟ ɢ ɡɚɪɟɝɢɫɬɪɢɪɭɣɬɟ ɩɨɥɭɱɟɧɧɨɟ ɩɪɢɥɨɠɟɧɢɟ.
ɑɬɨɛɵ ɭɜɢɞɟɬɶ ɪɚɛɨɬɭ ɤɥɢɟɧɬɚ ɢ ɜɧɟɲɧɟɝɨ COM-ɫɟɪɜɟɪɚ, ɪɟɚɥɢɡɭɟɦ
ɞɥɹ ɧɚɲɟɝɨ ɩɪɢɦɟɪɚ ɤɥɢɟɧɬ.
1. ɋɨɡɞɚɣɬɟ ɧɨɜɵɣ ɩɪɨɟɤɬ-ɩɪɢɥɨɠɟɧɢɟ MyClient.dpr ɫɨ ɫɜɨɟɣ ɮɨɪ-
ɦɨɣ.
2. ȼ ɪɚɡɞɟɥɟ ɨɩɢɫɚɧɢɹ private ɮɨɪɦɵ ɫɨɡɞɚɜɚɟɦɨɝɨ ɩɪɢɥɨɠɟɧɢɹ ɜɜɟ-
ɞɢɬɟ ɩɟɪɟɦɟɧɧɭɸ Server ɬɢɩɚ Variant.
3. ɇɚ ɫɨɛɵɬɢɟ OnCreate ɢ OnDestroy ɮɨɪɦɵ ɭɫɬɚɧɨɜɢɬɟ ɩɪɨɰɟɞɭɪɭ
ɜɵɡɨɜɚ ɧɚɲɟɝɨ ɫɟɪɜɟɪɚ:
procedure TForm1.FormShow(Sender: TObject);
begin
Server:=CreateOLEObject('MyServer.AutoServer');
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Server:=NULL;
end;
4. ɇɚ ɮɨɪɦɟ ɭɫɬɚɧɨɜɢɬɟ ColorDialog ɢ Button1. Ɋɟɚɥɢɡɭɣɬɟ ɫɨɛɵɬɢɟ
OnClick ɤɧɨɩɤɢ:
procedure TForm1.Button1Click(Sender: TObject);
begin
if ColorDialog1.Execute then Server.Color:=ColorDialog1.Color;
end;
5. Ɉɬɤɨɦɩɢɥɢɪɭɣɬɟ ɩɨɥɭɱɟɧɧɨɟ ɩɪɢɥɨɠɟɧɢɟ.
49
ɉɪɢ ɫɬɚɪɬɟ ɩɪɢɥɨɠɟɧɢɹ-ɤɥɢɟɧɬɚ ɚɜɬɨɦɚɬɢɱɟɫɤɢ ɡɚɩɭɫɤɚɟɬɫɹ ɜɧɟɲɧɢɣ
COM-ɫɟɪɜɟɪ. Ɏɨɪɦɚ ɫɟɪɜɟɪɚ ɦɟɧɹɟɬ ɫɜɨɣ ɰɜɟɬ ɜ ɫɨɨɬɜɟɬɫɬɜɢɢ ɫ ɜɵɛɪɚɧ-
ɧɵɦ ɰɜɟɬɨɦ ɜ ɞɢɚɥɨɝɨɜɨɦ ɨɤɧɟ ɤɥɢɟɧɬɚ, ɜɵɡɵɜɚɟɦɨɦ ɩɪɢ ɧɚɠɚɬɢɢ ɧɚ
ɤɧɨɩɤɭ Button1. Ɉɛɪɚɬɢɬɟ ɜɧɢɦɚɧɢɟ, ɤɨɝɞɚ ɤɥɢɟɧɬ ɡɚɜɟɪɲɚɟɬ ɪɚɛɨɬɭ, ɫɟɪ-
ɜɟɪ ɬɨɠɟ ɜɵɝɪɭɠɚɟɬɫɹ.
5.5. ɋɨɛɵɬɢɹ ɜ COM ɢ ɨɛɪɚɬɧɵɟ ɜɵɡɨɜɵ
ɉɪɢ ɪɚɡɪɚɛɨɬɤɟ ɫɟɪɶɟɡɧɵɯ COM-ɩɪɢɥɨɠɟɧɢɣ ɱɚɫɬɨ ɬɪɟɛɭɟɬɫɹ ɜɵ-
ɩɨɥɧɹɬɶ ɩɪɨɝɪɚɦɦɧɵɣ ɤɨɞ ɤɥɢɟɧɬɚ, ɟɫɥɢ ɜ COM-ɫɟɪɜɟɪɟ ɩɪɨɢɡɨɲɥɨ ɬɨ
ɢɥɢ ɢɧɨɟ ɞɟɣɫɬɜɢɟ. Ɉɫɨɛɟɧɧɨ ɷɬɨ ɚɤɬɭɚɥɶɧɨ, ɟɫɥɢ COM-ɫɟɪɜɟɪ ɩɨɞɞɟɪɠɢ-
ɜɚɟɬ ɞɢɚɥɨɝɨɜɵɟ ɨɤɧɚ ɞɥɹ ɜɜɨɞɚ ɤɚɤɢɯ-ɥɢɛɨ ɞɚɧɧɵɯ ɢ ɩɟɪɟɞɚɱɢ ɪɟɡɭɥɶɬɚɬɚ
ɤɥɢɟɧɬɭ. Ɉɫɧɨɜɧɚɹ ɢɞɟɹ ɦɟɯɚɧɢɡɦɚ ɫɨɛɵɬɢɣ ɫɥɟɞɭɸɳɚɹ: ɤɥɢɟɧɬ ɩɪɢ ɩɨɞ-
ɤɥɸɱɟɧɢɢ ɤ COM-ɫɟɪɜɟɪɭ ɩɟɪɟɞɚɟɬ ɢɧɬɟɪɮɟɣɫ, ɜ ɤɨɬɨɪɨɦ ɪɟɚɥɢɡɨɜɚɧɵ
ɮɭɧɤɰɢɢ ɫɨɛɵɬɢɣ. ɂɧɬɟɪɮɟɣɫ, ɩɟɪɟɞɚɜɚɟɦɵɣ ɤɥɢɟɧɬɨɦ COM-ɫɟɪɜɟɪɭ, ɧɚ-
ɡɵɜɚɟɬɫɹ ɢɧɬɟɪɮɟɣɫɨɦ ɨɛɪɚɬɧɨɝɨ ɜɵɡɨɜɚ.
Ⱦɥɹ ɪɟɚɥɢɡɚɰɢɢ ɤɨɦɩɨɧɟɧɬɚ, ɩɨɞɞɟɪɠɢɜɚɸɳɟɝɨ ɦɟɯɚɧɢɡɦ ɨɛɪɚɛɨɬɤɢ
ɫɨɛɵɬɢɣ ɢ ɨɛɪɚɬɧɨɝɨ ɜɵɡɨɜɚ, ɜ ɦɚɫɬɟɪɟ Automation Object Wizard ɧɭɠɧɨ
ɭɫɬɚɧɨɜɢɬɶ ɮɥɚɠɨɤ Generate Event support code. ɗɬɨ ɩɨɡɜɨɥɢɬ ɫɝɟɧɟɪɢɪɨ-
ɜɚɬɶ ɲɚɛɥɨɧ ɫɨɡɞɚɜɚɟɦɨɝɨ ɤɨɦɩɨɧɟɧɬɚ ɫ ɩɨɞɞɟɪɠɤɨɣ ɫɨɛɵɬɢɣ:
<ɢɦɹ ɤɨɦɩɨɧɟɧɬɚ> = class(TAutoObject, IConnectionPointContainer,
{<ɢɧɬɟɪɮɟɣɫɵ ɤɨɦɩɨɧɟɧ-
ɬɚ>})
private
{ Private declarations }
FConnectionPoints: TConnectionPoints;
FConnectionPoint: TConnectionPoint;
FSinkList: TList;
FEvents: <ɢɧɬɟɪɮɟɣɫ ɫɨɛɵɬɢɣ>;
public
procedure Initialize; override;
protected
{ Protected declarations }
property ConnectionPoints: TConnectionPoints
read FConnectionPoints implements IConnectionPointContainer;
procedure EventSinkChanged(const EventSink: IUnknown); over-
ride;
end;
ɗɬɨ ɨɫɧɨɜɧɵɟ ɫɜɨɣɫɬɜɚ ɢ ɦɟɬɨɞɵ ɞɥɹ ɩɨɞɞɟɪɠɤɢ ɤɨɦɩɨɧɟɧɬɨɦ COM-
ɫɟɪɜɟɪɚ ɦɟɯɚɧɢɡɦɚ ɫɨɛɵɬɢɣ ɢ ɮɭɧɤɰɢɢ ɨɛɪɚɬɧɨɝɨ ɜɵɡɨɜɚ
. ɉɪɨɰɟɞɭɪɵ
50
    4. ��������� ������ Get_Color � Set_Color:                             ��� ������ ����������-������� ������������� ����������� �������
          function TAutoServer.Get_Color: SYSUINT;                         COM-������. ����� ������� ������ ���� ���� � ������������ � ������-
                                                                           ��� ������ � ���������� ���� �������, ���������� ��� ������� ��
          begin                                                            ������ Button1. �������� ��������, ����� ������ ��������� ������, ���-
             result:=Form1.Color;                                          ��� ���� �����������.
          end;
          procedure TAutoServer.Set_Color(Value: SYSUINT);
                                                                                      5.5. ������� � COM � �������� ������
          begin
             Form1.Color:=Value;                                                ��� ���������� ��������� COM-���������� ����� ��������� ��-
          end;                                                             ������� ����������� ��� �������, ���� � COM-������� ��������� ��
                                                                           ��� ���� ��������. �������� ��� ���������, ���� COM-������ ��������-
    5. �������������� � ��������������� ���������� ����������.             ���� ���������� ���� ��� ����� �����-���� ������ � �������� ����������
     ����� ������� ������ ������� � �������� COM-�������, ���������        �������. �������� ���� ��������� ������� ���������: ������ ��� ���-
��� ������ ������� ������.                                                 �������� � COM-������� �������� ���������, � ������� �����������
                                                                           ������� �������. ���������, ������������ �������� COM-�������, ��-
    1. �������� ����� ������-���������� MyClient.dpr �� ����� ���-         �������� ����������� ��������� ������.
       ���.                                                                     ��� ���������� ����������, ��������������� �������� ���������
    2. � ������� �������� private ����� ������������ ���������� ���-       ������� � ��������� ������, � ������� Automation Object Wizard �����
       ���� ���������� Server ���� Variant.                                ���������� ������ Generate Event support code. ��� �������� ���������-
    3. �� ������� OnCreate � OnDestroy ����� ���������� ���������          ���� ������ ������������ ���������� � ���������� �������:
       ������ ������ �������:                                                  <��� ����������> = class(TAutoObject, IConnectionPointContainer,
       procedure TForm1.FormShow(Sender: TObject);                                                                    {<���������� ��������-
                                                                                                                      ��>})
       begin                                                                   private
          Server:=CreateOLEObject('MyServer.AutoServer');                         { Private declarations }
       end;                                                                      FConnectionPoints: TConnectionPoints;
                                                                                 FConnectionPoint: TConnectionPoint;
       procedure TForm1.FormDestroy(Sender: TObject);
                                                                                 FSinkList: TList;
       begin                                                                     FEvents: <��������� �������>;
          Server:=NULL;                                                        public
       end;                                                                      procedure Initialize; override;
                                                                               protected
    4. �� ����� ���������� ColorDialog � Button1. ���������� �������              { Protected declarations }
       OnClick ������:                                                           property ConnectionPoints: TConnectionPoints
       procedure TForm1.Button1Click(Sender: TObject);                               read FConnectionPoints implements IConnectionPointContainer;
       begin                                                                     procedure EventSinkChanged(const EventSink: IUnknown); over-
          if ColorDialog1.Execute then Server.Color:=ColorDialog1.Color;         ride;
       end;                                                                    end;
    5. �������������� ���������� ����������.                                   ��� �������� �������� � ������ ��� ��������� ����������� COM-
                                                                           ������� ��������� ������� � ������� ��������� ������. ���������

                                    49                                                                       50