COM的理論
以實例來講
COM的接口(Interface)是COM的核心,所有的COM接口都是通過IUnknown派生出來的,它告知客戶那些接口是有效的,即已經被實現類說定義。它定義的一般方式如下:
ISimpleInterface=Interface(IUnknown)
      Function GetName:String
       PRocedure SetName(v_Name:String)
        End;
如果在上面的接口中加入這樣一行:
ISimpleInterface=Interface(IUnknown)
       V_Name:String;
       Function GetName:String
       Procedure SetName(v_Name:String)
       End;
這樣是不被允許的,因為上面我們說到接口方法就像是一個占位符,需要實現類引出才有實際意義,v_Name:String這一句只是一個數據成員將永遠無任何意義,如果要定義也只能在實現類中定義。
現在舉一個COM的例子,沒有什么實際用處但至少說明問題:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
  ISimpleInterface=Interface(IUnknown)
    Procedure SetValue(v_Value:Integer);
    Function GetValue:Integer;
  End;
 
  TSimpleImple=Class(TInterfacedObject,ISimpleInterface)
  Public
    Value:Integer;
    Procedure SetValue(v_Value:Integer);
    Function GetValue:Integer;
  End;
 
var
  Form1: TForm1;
  v_Obj:TSimpleImple;
implementation
 
{$R *.dfm}
 
{ TSimpleImple }
 
function TSimpleImple.GetValue: Integer;
begin
  Result:=Value;
end;
 
procedure TSimpleImple.SetValue(v_Value: Integer);
begin
  Value:=v_Value;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  v_Obj:=TSimpleImple.Create;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  v_Obj.SetValue(StrToInt(Edit1.Text));
  Edit1.Clear;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit1.Text:=IntToStr(v_Obj.GetValue);
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  v_Obj.Free;
end;
 
end.
藍色字樣即定義了一個接口,在形式上在ISimpleInterface(接口定義)和TSimpleImple(實現類)幾乎定義都差不多,但是我要強調的是,接口定義是為了實現OLE方式的訪問,而實現類的定義,是接口功能的實現。兩者在功能和實現上都是有區別的。
 
(待續…)