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

UptoLike

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

W:=V; //ɫɱɟɬɱɢɤ ɫɫɵɥɨɤ ɭɜɟɥɢɱɢɥɫɹ ɢ ɪɚɜɟɧ 2
<……………………….>
V:=nil; //ɫɱɟɬɱɢɤ ɫɫɵɥɨɤ ɭɦɟɧɶɲɢɥɫɹ ɢ ɪɚɜɟɧ 1
W:=nil; //ɫɱɟɬɱɢɤ ɫɫɵɥɨɤ ɭɦɟɧɶɲɢɥɫɹ, ɢ ɨɛɴɟɤɬ ɭɞɚɥɢɥɫɹ
Ɂɚɦɟɱɚɧɢɟ 4.1.
ȼɫɟɝɞɚ ɩɪɢɫɜɚɢɜɚɣɬɟ ɫɫɵɥɤɚɦ ɧɚ ɤɨɦɩɨɧɟɧɬ ɡɧɚɱɟ-
ɧɢɟ nil, ɱɬɨɛɵ ɭɦɟɧɶɲɢɬɶ ɫɱɟɬɱɢɤ ɫɫɵɥɨɤ ɢ ɫɜɨɟɜɪɟɦɟɧɧɨ ɜɵɝɪɭɡɢɬɶ
ɤɨɦɩɨɧɟɧɬ ɢɡ ɩɚɦɹɬɢ.
Ɍɚɤ ɠɟ, ɤɚɤ ɢ ɜ ɤɥɚɫɫɚɯ, ɦɨɠɧɨ ɩɨɥɭɱɢɬɶ ɢɧɬɟɪɮɟɣɫ ɨɛɴɟɤɬɚ ɫ ɩɨɦɨ-
ɳɶɸ ɨɩɟɪɚɬɨɪɚ as:
V:=CreateComObject(GUID);
W:=V as ISomeInterface; //ɚɧɚɥɨɝɢɱɧɨ V.QueryInterface(IID,W)
ȼ ɩɚɤɟɬɟ Delphi ɩɨɫɬɚɜɥɹɟɬɫɹ ɫɩɟɰɢɚɥɶɧɚɹ ɭɬɢɥɢɬɚ ɞɥɹ ɪɟɝɢɫɬɪɚɰɢɢ
COM-ɫɟɪɜɟɪɨɜ ɢ ɛɢɛɥɢɨɬɟɤɢ ɬɢɩɨɜ tregsvr.exe. Ɉɛɵɱɧɨ ɷɬɚ ɭɬɢɥɢɬɚ ɧɚɯɨ-
ɞɢɬɫɹ ɜ ɩɚɩɤɟ Delphi\Bin.
4.4. ɉɪɢɦɟɪ ɪɟɚɥɢɡɚɰɢɢ COM-ɤɥɢɟɧɬɚ
ɉɪɢɜɟɞɟɦ ɩɪɢɦɟɪ ɢɫɩɨɥɶɡɨɜɚɧɢɹ ɜɫɬɪɨɟɧɧɨɝɨ COM-ɫɟɪɜɟɪɚ, ɫɨɡɞɚɧ-
ɧɨɝɨ ɜ ɬɪɟɬɶɟɣ ɱɚɫɬɢ.
1. ɋɨɡɞɚɣɬɟ ɜɫɬɪɨɟɧɧɵɣ COM-ɫɟɪɜɟɪ ɢɡ ɩɪɢɦɟɪɚ ɜ ɬɪɟɬɶɟɣ ɱɚɫɬɢ. Ɂɚɪɟ-
ɝɢɫɬɪɢɪɭɣɬɟ ɟɝɨ, ɤɚɤ ɧɚɩɢɫɚɧɨ ɜ ɩɟɪɜɨɣ ɱɚɫɬɢ ɲɟɫɬɨɝɨ ɩɭɧɤɬɚ.
2. Ɉɬɤɪɨɣɬɟ ɧɨɜɵɣ ɩɪɨɟɤɬ ɜ Delphi.
3. Ɉɬɤɪɨɣɬɟ ɞɢɚɥɨɝɨɜɨɟ ɨɤɧɨ ɢɦɩɨɪɬɚ ɛɢɛɥɢɨɬɟɤɢ ɬɢɩɨɜ (ɪɢɫ. 4.1) ɢ
ɧɚɣɞɢɬɟ ɛɢɛɥɢɨɬɟɤɭ ɧɚɲɟɝɨ COM-ɫɟɪɜɟɪɚ. ȿɫɥɢ CɈɆ-ɫɟɪɜɟɪ ɧɚɡɵ-
ɜɚɟɬɫɹ Convert.dll, ɬɨ ɜ ɫɩɢɫɤɟ ɛɭɞɟɬ ɫɬɪɨɤɚ Convert Library (Version
1.0). ɂɦɩɨɪɬɢɪɭɣɬɟ ɟɟ.
4. ɇɚ ɮɨɪɦɭ ɩɨɫɬɚɜɶɬɟ ɫɬɪɨɤɭ ɜɜɨɞɚ TEdit ɢ ɬɪɢ ɤɧɨɩɤɢ Bin, Oct, Hex
(ɪɢɫ. 4.2).
Ɋɢɫ. 4.2. Ɏɨɪɦɚ ɩɪɢɦɟɪɚ
5. ȼ ɫɨɨɬɜɟɬɫɬɜɭɸɳɟɦ ɮɨɪɦɟ ɦɨɞɭɥɟ ɧɚɛɟɪɢɬɟ ɫɥɟɞɭɸɳɢɣ ɬɟɤɫɬ:
unit Unit1;
interface
41
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dia-
logs, StdCtrls, Convert_TLB;
type
TForm1 = class(TForm)
Edit1: TEdit;
Bin: TButton;
Oct: TButton;
Hex: TButton;
procedure FormCreate(Sender: TObject);
procedure BinClick(Sender: TObject);
procedure OctClick(Sender: TObject);
procedure HexClick(Sender: TObject);
private
{ Private declarations }
Convert: IConvert;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
//ɫɨɡɞɚɟɬɫɹ ɷɤɡɟɦɩɥɹɪ Ʉɨɦɩɨɧɟɧɬɚ
Convert:=nil;
Convert:=CoObjConvert.Create;
if not Assigned(Convert) then
begin
ShowMessage('ɇɟ ɜɨɡɦɨɠɧɨ ɫɨɡɞɚɬɶ ɤɨɦɩɨɧɟɧɬ');
Close;
end;
end;
procedure TForm1.BinClick(Sender: TObject);
var str: WideString;
begin
if Convert.Bin(StrToInt(Edit1.Text),Str) then ShowMessage(Str)
42
    W:=V; //������� ������ ���������� � ����� 2                              uses
    <……………………….>                                                                    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dia-
                                                                                    logs, StdCtrls, Convert_TLB;
    V:=nil; //������� ������ ���������� � ����� 1
    W:=nil; //������� ������ ����������, � ������ ��������                   type
                                                                                    TForm1 = class(TForm)
    ��������� 4.1. ������ ������������ ������� �� ��������� �����-                     Edit1: TEdit;
��� nil, ����� ��������� ������� ������ � ������������ ���������                       Bin: TButton;
��������� �� ������.                                                                   Oct: TButton;
   ��� ��, ��� � � �������, ����� �������� ��������� ������� � ����-                   Hex: TButton;
��� ��������� as:                                                                      procedure FormCreate(Sender: TObject);
              V:=CreateComObject(GUID);                                                procedure BinClick(Sender: TObject);
              W:=V as ISomeInterface; //���������� V.QueryInterface(IID,W)             procedure OctClick(Sender: TObject);
                                                                                       procedure HexClick(Sender: TObject);
    � ������ Delphi ������������ ����������� ������� ��� �����������                private
COM-�������� � ���������� ����� tregsvr.exe. ������ ��� ������� ����-                  { Private declarations }
����� � ����� Delphi\Bin.                                                              Convert: IConvert;
                                                                                    public
                4.4. ������ ���������� COM-�������                                     { Public declarations }
                                                                                    end;
     �������� ������ ������������� ����������� COM-�������, ������-
                                                                             var
���� � ������� �����.
                                                                                   Form1: TForm1;
  1. �������� ���������� COM-������ �� ������� � ������� �����. ����-
     ����������� ���, ��� �������� � ������ ����� ������� ������.            implementation
  2. �������� ����� ������ � Delphi.
  3. �������� ���������� ���� ������� ���������� ����� (���. 4.1) �          {$R *.DFM}
     ������� ���������� ������ COM-�������. ���� C��-������ ����-            procedure TForm1.FormCreate(Sender: TObject);
     ������ Convert.dll, �� � ������ ����� ������ Convert Library (Version   begin
     1.0). ������������ ��.                                                      //��������� ��������� ����������
  4. �� ����� ��������� ������ ����� TEdit � ��� ������ Bin, Oct, Hex           Convert:=nil;
     (���. 4.2).                                                                Convert:=CoObjConvert.Create;
                                                                                if not Assigned(Convert) then
                                                                                begin
                                                                                     ShowMessage('�� �������� ������� ���������');
                                                                                     Close;
                                                                                end;
                                                                             end;
                           ���. 4.2. ����� �������
                                                                             procedure TForm1.BinClick(Sender: TObject);
  5. � ��������������� ����� ������ �������� ��������� �����:
                                                                             var str: WideString;
unit Unit1;
                                                                             begin
interface                                                                       if Convert.Bin(StrToInt(Edit1.Text),Str) then ShowMessage(Str)

                                       41                                                                          42