编写能被com组件调用的客户端

来源:互联网 发布:x264 linux 编辑:程序博客网 时间:2024/06/05 04:45

共分两步

一.写一个继承自toleserver的类

unit Unit4;

interface

uses
  OleServer, classes, Project1_TLB, Activex;

type
  TxzmOleServer = class(TOleServer)
  private
    Folexzm: ixzmtest;
    procedure InitServerData; override;
    procedure InvokeEvent(DispID: TDispID; var Params: TVariantArray); override;
    procedure Setolexzm(const Value: ixzmtest);

  public
    FMyServerData: TServerData;
    constructor Create(AOwner: TComponent; AMyServer: ixzmtest);
    destructor Destroy; override;

    // NOTE: If derived class is generated by TLIBIMP or ImportTypeLibraryCodeGenerator,
    //       the derived class will also expose a 'ConnectTo(interface)' function.
    //       You must invoke that method if you're using 'ckAttachToInterface' connection
    //       kind.
    procedure Connect; override;
    procedure Disconnect; override;
    property olexzm: ixzmtest read Folexzm write Setolexzm;

  end;


implementation

{ TxzmOleServer }
uses
  dialogs, sysutils, Unit3;

procedure TxzmOleServer.Connect;
begin
  self.ConnectEvents(olexzm);
end;

constructor TxzmOleServer.Create(AOwner: TComponent; AMyServer: ixzmtest);
begin
  olexzm:= AMyServer;
  inherited create(AOwner);

end;

destructor TxzmOleServer.Destroy;
begin

  inherited;
end;

procedure TxzmOleServer.Disconnect;
begin
  self.DisconnectEvents(olexzm);
end;

procedure TxzmOleServer.InitServerData;
begin
  FMyServerData.ClassID:= CLASS_xzmtest;
  FMyServerData.IntfIID:= IID_Ixzmtest;
  FMyServerData.EventIID:= DIID_IxzmtestEvents;
  FMyServerData.InstanceCount:= 0;
  self.ServerData:= @FMyServerData;
  inherited;

end;

procedure TxzmOleServer.InvokeEvent(DispID: TDispID;
  var Params: TVariantArray);
begin
  inherited;
  form3.InvokeEvent(dispid, params);
end;

procedure TxzmOleServer.Setolexzm(const Value: ixzmtest);
begin
  Folexzm := Value;
end;

end. 

二.建立一个接收com组件事件的界面

unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Project1_TLB, StdCtrls, Unit4, activex, oleserver;

type
  TForm3 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    FOlexzm: ixzmtest;
    Fxzmoleserver: TxzmoleServer;
    { Private declarations }
  public
    { Public declarations }
    procedure InvokeEvent(DispID: TDispID; var Params: TVariantArray);
    property Olexzm: ixzmtest read FOlexzm write FOlexzm;
    property xzmOleServer: TxzmoleServer read Fxzmoleserver write Fxzmoleserver;
  end;

var
  Form3: TForm3;

implementation


{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
begin
  Olexzm:= coxzmtest.Create as ixzmtest;
  xzmoleserver:= Txzmoleserver.Create(self, olexzm);
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
  xzmoleserver.Connect;
end;

procedure TForm3.InvokeEvent(DispID: TDispID; var Params: TVariantArray);
var
  i: integer;
begin
  memo1.Lines.Add(inttostr(dispid));
  for i:= 0 to length(params) - 1 do
  begin
    memo1.Lines.Add('参数'+inttostr(i)+':'+params[i]);
  end;
end;

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  xzmoleserver.Disconnect;
  xzmoleserver.Free;
  olexzm:= nil;

end;

end.

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 狗狗反胃吐白沫怎么办 2岁宝宝牙齿被腐蚀怎么办 2岁宝宝乳牙腐蚀怎么办 1岁宝宝门牙腐蚀怎么办 3岁宝宝有蛀牙怎么办 3岁宝宝乳牙腐蚀怎么办 三岁宝宝烂牙怎么办 宝宝牙被腐蚀了怎么办 嗓子声音变粗了怎么办 玩网游钱被骗了怎么办 家里的白墙脏了怎么办 月经弄到床垫上怎么办 出租房墙面太脏怎么办 苹果6镜头模糊了怎么办 6s前摄像头进灰怎么办 手机镜头进灰了怎么办 6s摄像头进灰了怎么办 7plus摄像头进灰怎么办 苹果喇叭进灰了怎么办 苹果7摄像头进灰怎么办 锁眼里胶水堵了 怎么办 锁眼被牙签堵了怎么办 锁孔被胶水堵了怎么办 快手上不了同城怎么办 昌珉入伍宋茜怎么办 嗓子里卡了鱼刺怎么办 在餐厅吃到虫子怎么办 在餐厅吃出虫子怎么办 孕妇被虫子咬了怎么办 吃外卖吃到虫子怎么办 杯子盖拧错位了怎么办 身边有吸毒的人怎么办 如果牛难产了怎么办要 牛难产拉不出来怎么办 老公发现老婆有外遇怎么办 睡眠不好半夜老是醒怎么办 拔完智齿肿了怎么办 拔牙后咽口水疼怎么办 吃了脏东西拉肚子怎么办 微信遇到仙人跳怎么办 牙有裂痕疼应该怎么办