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

2016-02-19 12:36 4 1 收藏

下面是个超简单的非COM环境下的接口编程--问题技巧应用(二)教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

【 tulaoshi.com - 编程语言 】

(接上文)

代码

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

接口:

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 FooNum:=0;

end;

 

function TFooManager.CreateAFoo: IFoo;

begin

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 inc(FooNum);

 if length(FList)FooNum then

  setlength(FList,FooNum*2);

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

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

end;

 

procedure TFooManager.DelAFoo(id:integer);

var

 i:integer;

begin

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 if FooNum0 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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 result:=FList[id] as IFoo;

end;

 

function TFooManager.GetFooNum: integer;

begin

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 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;

来源:http://www.tulaoshi.com/n/20160219/1601299.html

延伸阅读
标签: Java JAVA基础
5) 配置系统变量 vi /etc/profile // 编辑 /etc/profile 在文件结尾加入: PATH="$PATH:/usr/local/jakarta-tomcat/bin:/usr/local/jdk1.2.2/bin:/usr/local/jdk1.2.2/jre/bin" JAVA_HOME=/usr/local/jdk1.2.2 export JAVA_HOME JRE_HOME=/usr/local/jdk1.2.2/jre export JRE_HOME TOMCAT_HOME=/usr/local/jakarta-tomcat e...
标签: Web开发
AJAX传递中文字符串时必须把中文字符串编码成unicode,一般会用到JS的自带函数escape().不过找到了更好的函数来确决中文字符转换成unicode编码的函数 function uniencode(text)   {       text = escape(text.toString()).replace(/\+/g, "%2B");       var matches = ...
在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程我...
拍摄极端环境下会考虑的问题   当你看到这个环境想拍摄的时候,你会怎样做呢?拍摄前有什么要考虑的元素呢?这次便让笔者分享一下拍摄极端环境下会考虑的步骤吧!下次拍摄的时候你也可以作为参考啊! Photo by helix_rl 一、问自己:该用什么拍摄模式?光圈先决?手动模式? 大部份的时间笔者也会用A-Mode (光圈先决),透...
摘要VisualBasic有着强大的数据库存取能力,不仅能够直接支持MsAccess数据库,而且通过其内部安装的ISAM驱动程序使它能间接支持FoxPro、dBASE等外来数据库。本文不仅从VB数据库体系结构的角度探讨了VB对这些外来数据库的支持,还结合了一些实例具体阐述了使用数据库存取对象变量的方法实现这些外来数据库的新建、库结构修改、显示及其运行环境设...

经验教程

137

收藏

20
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部