打印本文 打印本文 关闭窗口 关闭窗口
组件技术的本质COM实例分析一
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2736  更新时间:2009/4/23 18:38:00  文章录入:mintao  责任编辑:mintao
算法实际上很简单,可以利用循环,也可以利用递归,在此仅仅做简单的分析。我们用循环来处理的话应该需要从后边入手,第十天刚刚吃的还有一个桃子,那么第十天,就应该是四个,第九天是十个,第八天是二十二个……,如此类推,我们可以很容易的得出一共有多少个桃子,可以进行如下的处理:

Var

  Acount : Integer;

  Asum : Integer;

Begin

  Asum := 1;

  For Acount := 10 DownTo 1 do

    Asum := ( Asum + 1 ) * 2;

End;

理解起来很容易,到了第十天吃过之后还剩一个桃子,那么,第十天实际上应该是四个,哪此类推的倒循环回去就可以知道答案。而得用递归将更简单,如下:

Function Cal(Avalue : Integer) : Integer;

Begin

  If Avalue = 11 then

    Result := 1 else

    Result ;= (Cal(Avalue + 1) + 1) * 2;

End;

猴子吃桃,虽然题目相当简单,但或多或少的有些饶人,用循环我们已经很容易的作了出来,接正是来用递归完成这个过程,应为第10天吃完之后还剩1个,相当于到了第11天还有4个桃子,所以我们就可以列出:if DayValue = 11 then Sum = 1 ;递归的过程很简单,只要我们可以把握住它是一个堆的过程,进去了总还是要出来的,而且先进后出;

1.      创建COM服务器

要创建一个COM服务器来实现此算法,而且,这个COM服务器同时还要做用户登录接口。Delphi7为我们提供了很好的创建向导,使得我们不在如在Delphi3下一样,需要手动键入代码,需要说明的一些问题,因为这个应用程序将作成进程内服务,所以首要的前提就是做一个Library,一切操作都应该在这个Library的容器里进行。

新建一个应用程序(File -> New -> Other)选择ActiveX标签,如下图所示:又击ActiveX Library或是选中ActiveX按回车键,Delphi会为我们自动的完成一些工作。

 

当点击“OK”按钮时,如下:

library Project2;

 

uses

  ComServ;

 

exports

  DllGetClassObject,

  DllCanUnloadNow,

  DllRegisterServer,

  DllUnregisterServer;

 

{$R *.RES}

 

begin

end.

这样就创建了一个进行内COM服务器的首要工作,DLL如上边代码所示,Delphi会为我们自动的建立,而DllGetClassObject、DllCanUnloadNow、DllRegisterServer、DllUnregisterServer在前边的章节我们已经详细的介绍过,在些不再阐述。这后请保存这个文件为SrvPro.

在此稍微的做一下分析,为了实现上边的算法,我们需要用到接口来供客户端调用,而现在我们仅仅完成了ActiveX Library库,接下来的工作就是创建正真的COM组件。创建COM组件也很简单,根据相导提示(File-> New -> Other -> ActiveX),如下图

 

在此我们简单的来说一说这个Com Object对话框的具体含义:

Class Name :在此填写类名,Delphi会自动的给我们加上“T”;

Instancing : 在进程内服务,它是没有意义的,因为COM服务器和应用程序在同一个进程里;

Threading Modal:线程模型,线程模型的具体做含意在之前我们已经详细的介绍过,此处将不一再阐述,但是需要知道的是,并非在此设置了某一种线程模型,那么这个服务器就是一个什么样的线程模型,而是在编程过程中来合理的安排。推荐默认的线程模型:Apartment;

点“OK”按钮之后,并将文件保存成AccUnt,会出现入下代码:

unit AccUnt;

 

{$WARN SYMBOL_PLATFORM OFF}

 

interface

 

uses

  Windows, ActiveX, Classes, ComObj;

 

type

  TAccemp = class(TComObject)

上一页  [1] [2] [3] [4]  下一页

打印本文 打印本文 关闭窗口 关闭窗口