非COM环境下的接口编程--问题,技巧,应用(二)

原创 2004年05月17日 18:23:00

(接上文)

代码

现在把全文的代码列举如下,其中有一些上面没有给出的代码,但它们也很重要,列在一起方便大家浏览,请仔细查看下面的代码以获得需要的信息,当然本文也仅仅是做为一个简单的例子,举出了一些常见的问题和解决技巧,以及象这样的接口编程的一个可能应用。

接口:

IFoo = interface;<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

IFooManager = interface

  ['{3A10DC39-4B14-4C61-B657-E445C55408B6}']

  function CreateAFoo:IFoo;

  procedure DelAFoo(id:integer);

  function GetFooNum:integer;

  function GetFooByID(id:integer):IFoo;

end;

 

IFoo = interface

  //我们要维护的对象只实现了一个简单的加法运算做为例子

  ['{22C541AA-0BA4-4092-B0EB-D267AB1FF001}']

  function fooAdd(x,y:integer):integer;

end;

 

TFoo的声明和实现:

TFoo = class(TMyInterfacedObject,IFoo)

  protected

   function fooAdd(x,y:integer):integer;

end;

 

implementation

 

{ TFoo }

function TFoo.fooAdd(x, y: integer):integer;

begin

 result:=x+y;

end;

工厂类的声明和实现:

TFooManager=class(TMyInterfacedObject,IFooManager)

  private

    FList:array of TFoo;

    FooNum:integer;

  protected

    constructor Create;

    function CreateAFoo:IFoo;

    procedure DelAFoo(id:integer);

    function GetFooNum:integer;

    function GetFooByID(id:integer):IFoo;

  public

    destructor Destroy;override;

 end;

 

var

 FooMan:TFooManager;

 

implementation

 

{ TFooManager }

constructor TFooManager.Create;

begin

 FooNum:=0;

end;

 

function TFooManager.CreateAFoo: IFoo;

begin

 inc(FooNum);

 if length(FList)<FooNum then

  setlength(FList,FooNum*2);

 FList[FooNum-1]:=TFoo.Create;

 result:=FList[FooNum-1] as IFoo;

end;

 

procedure TFooManager.DelAFoo(id:integer);

var

 i:integer;

begin

 if FooNum>0 then

 begin

   FList[id].Free;

   for i:=id to FooNum-2 do

   begin

    FList[i]:=FList[i+1];

   end;

   FList[FooNum-1]:=nil;

   Dec(FooNum);

 end;

end;

 

destructor TFooManager.Destroy;

//在释放工厂类前释放所有所维护的对象

var

 i:integer;

begin

  for i:=0 to FooNum-1 do

  begin

   FList[i].Free;

   FList[i]:=nil;

  end;

  Finalize(Flist);

  inherited;

end;

 

function TFooManager.GetFooByID(id: integer): IFoo;

begin

 result:=FList[id] as IFoo;

end;

 

function TFooManager.GetFooNum: integer;

begin

 result:=FooNum;

end;

 

Dll中仅有的两个导出函数:

function GetFooManIntf:IFooManager;stdcall;

begin

 if not assigned(FooMan) then

 begin

  FooMan:=TFooManager.Create;

 end;

 result:=FooMan as IFooManager;

end;

 

procedure FreeLib;stdcall;

//释放工厂类

begin

 if assigned(FooMan) then

 begin

  FooMan.Free;

  FooMan:=nil;

 end;

end;

COM组件开发(一)—— 对象与接口

一.前言        在COM规范中,最基本的两个要素就是对象与接口,因为COM就是由这两者来共同实现的。COM对象在组件中是被封装起来的,客户代码只能通过接口来访问COM对象并享受其,由于客户与C...
  • q5806622
  • q5806622
  • 2015年01月19日 23:08
  • 3552

一篇非常经典的文章(面向接口编程)

原文链接:http://blog.chinaunix.net/uid-20478213-id-1942005.html 面向对象设计里有一点大家已基本形成共识,就是面向接口编程,我想大多数人对这个是...
  • legend404
  • legend404
  • 2016年10月14日 10:10
  • 1403

COM组件开发(二)——COM应用模型及COM库

C/S模型         COM对象与客户程序之间是基于C/S(客户端/服务器)的模型在运行的,COM服务器是组件对象的容器,由组件对象向COM客户提供服务,所以COM的应用模型继承了C/S模型的优...
  • q5806622
  • q5806622
  • 2015年01月31日 11:34
  • 1601

18.可连接对象和连接点原理

讲解可连接对象和连接点原理,说明实现一个可连接对象需要做的事情。
  • wenzhou1219
  • wenzhou1219
  • 2016年07月16日 21:04
  • 741

网络应用编程接口

第十六篇 网络应用编程接口1、引言 上一篇着重讲述了网络的一些概念方面的问题,本章将重点放在编程应程序的网络接口的学习。上图中位蓝色字体处才网络编程的重点。。2、TCP协议 前面说过它是一种面向连...
  • u012724150
  • u012724150
  • 2016年08月18日 10:12
  • 364

COM组件设计与应用(二)——GUID和接口

本文摘自:http://blog.vckbase.com/teacheryang/archive/2005/06/27/8884.html 一、前言   书接上回,话说在 doc(Wo...
  • CNHK1225
  • CNHK1225
  • 2016年01月09日 17:53
  • 1231

支付宝接口开发集成支付环境小结

关于支付宝的接口集成气死是很简单,目前大概有3种类型,即时到帐、双功能、担保交易,只需要集成一次担保交易,其他的比如即时到帐集成很容易,担保交易的状态有几种,比如:是否支付成功,卖家是否发货,买家确认...
  • y_server
  • y_server
  • 2016年09月22日 17:40
  • 1278

【Matlab编程】Matlab高效编程技巧

1.默认状态下,matlab显示精度是short型,而默认的计算精度是double型,并且显示精度与计算精度没有关系。 2. 一只失明的猫的问题:注意方法! 3.给数组预分配空间是基本的高效编程准则...
  • tengweitw
  • tengweitw
  • 2014年06月16日 18:39
  • 2224

COM编程精彩实例--COM通信

COM是如何进行通信的: ////// ①代理/桩子或COM DLL将方法的调用参数转化成NDR格式; ②COM调用RPC将格式化的数据传递给服务器端的COM代理/桩...
  • zang141588761
  • zang141588761
  • 2016年12月22日 14:17
  • 185

delphi下的接口编程学习笔记

Delphi下的接口编程     Delphi下的接口编程学习笔记   1.1  ...
  • rocklee
  • rocklee
  • 2015年09月22日 21:12
  • 1377
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:非COM环境下的接口编程--问题,技巧,应用(二)
举报原因:
原因补充:

(最多只允许输入30个字)