主题:的中间层框架 第一节

主题:<插件式>的中间层框架
时间:2004-12-31 15:00
主讲:D10.天地弦

2004-12-31 14:56:15 /:>D10.天地弦(185511468)
开始吧,我们 

2004-12-31 14:57:22 /:>D10.天地弦(185511468)
请大家先看图
http://www.jqk.net.cn/dkFrameworkWeb/dkFramework_files/dkFramework_frames.htm
用IE打开
昨天发现用QQ的不行

dkFramework_gif_1.gif

<图一>框架运作图


2004-12-31 15:04:49 /:>D10.天地弦(185511468)
上面就是中间层的框架运作图

2004-12-31 15:07:10 /:>D10.天地弦(185511468)
然后打开客户端代码

2004-12-31 15:09:21 /:>D10.天地弦(185511468)
看看客户端的代码

2004-12-31 15:09:38 A1.Aleyn.wu(45198124)
http://www.e-midas.cn/eds/dk.rar
 

2004-12-31 15:10:02 A1.Aleyn.wu(45198124)
D10的框架图,大家下载来用IE看就可以了。

2004-12-31 15:10:05 /:>D10.天地弦(185511468)
好的,大家把老大那个down一下

2004-12-31 15:10:29 /:>D10.天地弦(185511468)
里面解压出来,是web页面,大家在本机上看

2004-12-31 15:11:43 /:>D10.天地弦(185511468)
好了,我们按照从中间层获取帐套来讲讲



 

dkFramework_gif_2.gif

<图二> 从中间层获取一个帐套数据



2004-12-31 15:12:14 /:>D10.天地弦(185511468)
大家有没有看到
procedure TFMainForm.BtnGetAccountClick(Sender: TObject);
var
  vData, Msg: OleVariant;
begin
  inherited;
  AddParamToData(vData, 'Type', amtGet);

  if CLDataModule.SocketConnection.AppServer.ProcessData(miAccountMgr, aiAccountMgr, vData, Msg) then
  begin
    CdsAccount.Data := vData;
    CdsAccount.Active := true;
  end; //
end;

2004-12-31 15:12:24 /:>D10.天地弦(185511468)
这一段

2004-12-31 15:12:40 /:>D10.天地弦(185511468)
是获取帐套按钮的事件代码

2004-12-31 15:13:24 /:>D10.天地弦(185511468)
ProcessData这个函数是中间层提供的接口

2004-12-31 15:13:25 D3天之痕若虹(86278566)
调用Server端的ProcessData过程

2004-12-31 15:13:43 /:>D10.天地弦(185511468)
是调用Server端的ProcessData

2004-12-31 15:14:06 /:>D10.天地弦(185511468)
再请大家打开一个Delphi打开Middlelayer.png

2004-12-31 15:14:25 /:>D10.天地弦(185511468)
\MiddleLayer\MiddleLayer.bpg

2004-12-31 15:15:07 /:>D10.天地弦(185511468)
如果可以看到web的看看Data数据流程图


dkFramework_gif_3.gif

<图三>参数Data流向图



2004-12-31 15:16:10 /:>D10.天地弦(185511468)
Data里面客户端是放参数的

2004-12-31 15:16:29 /:>D10.天地弦(185511468)
到模块里处理后,返回的是客户端要的数据

2004-12-31 15:17:21 /:>D10.天地弦(185511468)
我们现在看到中间层的代码

2004-12-31 15:17:43 /:>D10.天地弦(185511468)
function TMLRDataModule.ProcessData(ModuleIndex, ActionIndex: Integer;
  var Data, Msg: OleVariant): WordBool;
begin
  try
    result := TFrameworkServices.ItSelf[ID].ModelService[ModuleIndex].ProcessData(Id, ActionIndex, Data, Msg) = S_OK;
    result := true;
  except
    result := false;    //
  end;
end;

2004-12-31 15:18:08 /:>D10.天地弦(185511468)
大家有看到不

2004-12-31 15:18:11 /:>D10.天地弦(185511468)
这句是在Server.工程里的
75行
unit uMLRDataModule;

2004-12-31 15:19:21 /:>D10.天地弦(185511468)
所有客户端请求处理的数据都通过该函数进行处理

2004-12-31 15:19:52 西门吹风㊣(48542332)
大家看明白这句吗?
TFrameworkServices.ItSelf[ID].ModelService[ModuleIndex].ProcessData(Id, ActionIndex, Data, Msg) = S_OK;

2004-12-31 15:20:02 D3天之痕若虹(86278566)
下载刚那文件呀
http://www.e-midas.cn/eds/dk.rar

2004-12-31 15:20:15 hellfire(149902352)
没看懂

2004-12-31 15:20:46 /:>D10.天地弦(185511468)
大家,先停一下

2004-12-31 15:20:50 乾隆(7891551)
我也没看懂

2004-12-31 15:21:00 西门吹风㊣(48542332)
TFrameworkServices 是个接口

2004-12-31 15:21:02 /:>D10.天地弦(185511468)
那句我等一下会讲的

2004-12-31 15:21:21 /:>D10.天地弦(185511468)
我先想了解一下大家的思路

2004-12-31 15:21:35 /:>D10.天地弦(185511468)
处理数据的一个思路

2004-12-31 15:21:43 C03.MUSIC(281361369)
这个跟老大的思路是一样的吧?

2004-12-31 15:21:44 西门吹风㊣(48542332)
对,估计大家一下很难跟

2004-12-31 15:21:44 D3天之痕若虹(86278566)
听。。。

2004-12-31 15:21:47 /:>D10.天地弦(185511468)
然后介绍一下我的思路

2004-12-31 15:22:16 /:>D10.天地弦(185511468)
我先说我的思路吧

2004-12-31 15:22:38 /:>D10.天地弦(185511468)
客户层==>中间层

2004-12-31 15:23:14 西门吹风㊣(48542332)
先听一下吧


2004-12-31 15:23:17 /:>D10.天地弦(185511468)
首先我们想一想客户层与中间层是不是需要很多的接口,来实现很多种服务呢

2004-12-31 15:23:29 乾隆(7891551)
是的

2004-12-31 15:23:35 /:>D10.天地弦(185511468)
客户层==>中间层
首先我们想一想客户层与中间层是不是需要很多的接口,来实现很多种服务呢

2004-12-31 15:23:45 hellfire(149902352)
Yes

2004-12-31 15:23:45   冷俊(76437853)

2004-12-31 15:23:52 西门吹风㊣(48542332)

2004-12-31 15:23:52 00.bit(10910310)
YS

2004-12-31 15:24:05 神王(375867424)
Y

2004-12-31 15:24:24 湖北人(364076660)
是啊

2004-12-31 15:24:26 /:>D10.天地弦(185511468)
计算机只认识0,1我想大家都知道吧

2004-12-31 15:24:42 C03.MUSIC(281361369)
这一句应该是对接口进行统一封装吧

2004-12-31 15:24:46 乾隆(7891551)
是的

2004-12-31 15:24:55 /:>D10.天地弦(185511468)
0,1,两个东西,就可以实现各种服务了,

2004-12-31 15:25:18 hellfire(149902352)
go on

2004-12-31 15:25:28 A3.武稀松(42088303)
组合啊

2004-12-31 15:25:42 /:>D10.天地弦(185511468)
所以我想没有必要,中间层和客户层,通过很多线路联起来

2004-12-31 15:25:50 A3.武稀松(42088303)
严重同意

2004-12-31 15:25:52 乾隆(7891551)
你是说客户端调用中间层的过程和函数,中间层靠返回的0,1来判断执行还是不执行?

2004-12-31 15:26:08 西门吹风㊣(48542332)

2004-12-31 15:26:23 /:>D10.天地弦(185511468)
我的意思是,中间层对客户层,只要少量的接口,就可以实现客户服务

2004-12-31 15:26:58 神王(375867424)
如果业务量大的话,有如何

2004-12-31 15:27:11 /:>D10.天地弦(185511468)
我来打个如方,以前在学校,上层开会的时候只把所有的人招集起来开会,还是每个班派一个代表去就行了

2004-12-31 15:27:14 乾隆(7891551)
D10:这里的接口可以理解成过程和函数吗?

2004-12-31 15:27:20 D3天之痕若虹(86278566)
先听听,D10的思路吧

2004-12-31 15:27:30 C03.MUSIC(281361369)
是每个班派一个代表吧

2004-12-31 15:27:41 /:>D10.天地弦(185511468)
是的,每个班派一个代表

2004-12-31 15:28:05 神王(375867424)
这要看情况

2004-12-31 15:28:10 hellfire(149902352)
上层开会肯定是派一个代表吧

2004-12-31 15:28:23 /:>D10.天地弦(185511468)
客户层和中间层也一样只有需要少量接口,

2004-12-31 15:28:34 神王(375867424)
继续说,

2004-12-31 15:28:38 西门吹风㊣(48542332)
代表就是我们的接口

2004-12-31 15:28:39 乾隆(7891551)
哦,在听

2004-12-31 15:28:44 /:>D10.天地弦(185511468)
想想客户层和中间层的通讯,大部分是怎么样的

2004-12-31 15:28:47 C03.MUSIC(281361369)
就是说应该为中间层也进行分层管理?

2004-12-31 15:28:56 乾隆(7891551)
这里的接口可以理解成过程和函数吗? 

2004-12-31 15:29:15 初六无云(359062004)
接口就是协议,过程,函数也是协议

2004-12-31 15:29:17 D3天之痕若虹(86278566)
也可以

2004-12-31 15:29:48 /:>D10.天地弦(185511468)
是不是传递参数信息到中间层,中间层根据这些参数信息,然后,决定要做什么事,然后需要返回数据就返回数据到客户层

2004-12-31 15:29:59 乾隆(7891551)
讲通俗点嘛,DELPHI都准备好协议了直接说是函数或过程吧

2004-12-31 15:30:03 神王(375867424)
是的

2004-12-31 15:30:13   冷俊(76437853)

2004-12-31 15:30:30 /:>D10.天地弦(185511468)
中间层根据这些参数信息,然后,决定要做什么事,然后需要返回数据就返回数据到客户层 

2004-12-31 15:30:58 /:>D10.天地弦(185511468)
大伙先跟着我的思路想一想

2004-12-31 15:31:10 神王(375867424)
明白

2004-12-31 15:31:21 乾隆(7891551)
想通了,这里好理解

2004-12-31 15:31:23 西门吹风㊣(48542332)

2004-12-31 15:31:43 C9. 随风飘(87450854)
继续  

2004-12-31 15:31:47 D3天之痕若虹(86278566)
有些像设计模式的思想....

2004-12-31 15:31:47   冷俊(76437853)
我还行 

2004-12-31 15:31:57 乾隆(7891551)
讲讲如何具体处理客户发出请求吧

2004-12-31 15:31:58 A3.武稀松(42088303)
D10是说定义尽量少的接口方法,通过参数控制中间层的功能调用?

2004-12-31 15:32:05 /:>D10.天地弦(185511468)
像Windows消息一样,Windows只负责发送各种消息到应用程序,然后,应用程序根据消息的代码做出反应

2004-12-31 15:32:16 西门吹风㊣(48542332)
对,D10就是用到设计模式

2004-12-31 15:32:26 /:>D10.天地弦(185511468)
42088303(A3.武稀松) 15:31:58
D10是说定义尽量少的接口方法,通过参数控制中间层的功能调用? ==》3哥,是的

2004-12-31 15:32:51 hellfire(149902352)
明白

2004-12-31 15:33:09 D3天之痕若虹(86278566)
其实D10的思路就是。。
在服务端,再分块管理。。。

2004-12-31 15:33:27 C03.MUSIC(281361369)
A1的那个程序也是这样

2004-12-31 15:33:34 /:>D10.天地弦(185511468)
我们中间层都通过
   function ProcessData(ModuleIndex, ActionIndex: Integer; var Data,
      Msg: OleVariant): WordBool; safecall;
来路客户端打交道

2004-12-31 15:33:47 /:>D10.天地弦(185511468)
对的,其实就是A1的三层了接口了

2004-12-31 15:33:59 乾隆(7891551)
哦,客户端就一个函数啊

2004-12-31 15:34:22 神王(375867424)
只是传与接

2004-12-31 15:34:28 /:>D10.天地弦(185511468)
大家都明白吗?

2004-12-31 15:34:30 C9. 随风飘(87450854)
就象所谓的瘦客户端?

2004-12-31 15:34:38 西门吹风㊣(48542332)
明白

2004-12-31 15:34:46 C03.MUSIC(281361369)
其实中间层就提供给客户端一个或几个接口,具体实现是经过封装了的,这些对客户没有用处,对否?

2004-12-31 15:34:47 D3天之痕若虹(86278566)
是的,就是说只要接口统一。。

2004-12-31 15:34:48 神王(375867424)
明白

2004-12-31 15:35:03 B1.斜阳(249208513)
我倒是觉得这么出来客户端和中间层的调用,有点过于简单。先听你讲课吧,完事再讨论这个问题

2004-12-31 15:35:17 乾隆(7891551)
说错了吧,是中间层就一个函数PROcessData于客户打交道吧

2004-12-31 15:35:32 /:>D10.天地弦(185511468)
    function ProcessData(ModuleIndex, ActionIndex: Integer; var Data,
      Msg: OleVariant): WordBool; safecall;
Data 参数(

2004-12-31 15:36:11 /:>D10.天地弦(185511468)
客户端发送请求的时候中间层收到请求可以从Data这个参数里取参数

2004-12-31 15:36:13 乾隆(7891551)
D10:这个函数好复杂啊,给讲讲啥意思

2004-12-31 15:36:20 /:>D10.天地弦(185511468)
各种参数

2004-12-31 15:36:32 A1.Aleyn.wu(45198124)
我们中间层都通过
    function ProcessData(ModuleIndex, ActionIndex: Integer; var Data,
      Msg: OleVariant): WordBool; safecall;   <-怎么看都有点熟悉。。。。。。[:D]

2004-12-31 15:36:48 /:>D10.天地弦(185511468)
ModuleIndex是指定要通过那个模块来处理这个信息,

2004-12-31 15:37:02 /:>D10.天地弦(185511468)
呵呵,是你发明的东西了,当然熟

2004-12-31 15:37:07 /:>D10.天地弦(185511468)
我只是再炒一下

2004-12-31 15:37:17 西门吹风㊣(48542332)
活学活用

2004-12-31 15:37:19 /:>D10.天地弦(185511468)
ActionIndex是要执行的动作了

2004-12-31 15:37:31 /:>D10.天地弦(185511468)
是一个Integer类型

2004-12-31 15:37:37 A1.Aleyn.wu(45198124)
ActionIndex可以不用在参数里。

2004-12-31 15:37:39 /:>D10.天地弦(185511468)
ActionIndex =1的时候做什么

2004-12-31 15:37:51 /:>D10.天地弦(185511468)
=2的时候做什么

2004-12-31 15:38:00 /:>D10.天地弦(185511468)
这样协议就是大家去规定了

2004-12-31 15:38:01 初六无云(359062004)
提个意见,把这个函数的参数用一个类来表示怎样?

2004-12-31 15:38:07 神王(375867424)
利用消息传递机制

2004-12-31 15:38:18 A3.武稀松(42088303)
建议客户端可以在有一个包装,可以定义各种方法.在方法里面调用ProcessData.
就像Windows既提供消息,也提供方便调用的API.

2004-12-31 15:38:19 A1.Aleyn.wu(45198124)
函数一般在三个参数以内比较好,你这个函数有改进一下。

2004-12-31 15:38:33 /:>D10.天地弦(185511468)

2004-12-31 15:38:38 神王(375867424)
同意A3

2004-12-31 15:38:51 /:>D10.天地弦(185511468)
function TMLRDataModule.ProcessData(ModuleIndex, ActionIndex: Integer;
  var Data, Msg: OleVariant): WordBool;
begin
  try
    result := TFrameworkServices.ItSelf[ID].ModelService[ModuleIndex].ProcessData(Id, ActionIndex, Data, Msg) = S_OK;
    result := true;
  except
    result := false;    //
  end;
end;

2004-12-31 15:38:53 A3.武稀松(42088303)
D10认为如何

2004-12-31 15:39:30 乾隆(7891551)
接着讲这个函数啊,WordBool什么意思啊[:$]

2004-12-31 15:39:31 /:>D10.天地弦(185511468)
3哥,好啊

2004-12-31 15:39:40 /:>D10.天地弦(185511468)
我功力还不够

2004-12-31 15:39:49 西门吹风㊣(48542332)
WordBool 布尔型

2004-12-31 15:39:52 A3.武稀松(42088303)
大家在讨论么

2004-12-31 15:39:56 /:>D10.天地弦(185511468)
不知道大家有没有跟上

2004-12-31 15:39:56 神王(375867424)
大哥先接着说

2004-12-31 15:39:57 A1.Aleyn.wu(45198124)
42088303(A3.武稀松) 15:38:18
建议客户端可以在有一个包装,可以定义各种方法.在方法里面调用ProcessData.
就像Windows既提供消息,也提供方便调用的API. <-如果D10是继承我的做法,那就是A3你所说的了。

2004-12-31 15:40:09 B1.斜阳(249208513)
早在A1给出他的代码的时候,我就觉得客户端和中间层的模块绑的有点过于紧密,呵呵,
还没形成一个好的思路跟A1说,这又有一个人用上这个方法了[:D]

2004-12-31 15:40:36 /:>D10.天地弦(185511468)
大家有没有跟上?
 

2004-12-31 15:40:44 D3天之痕若虹(86278566)
在听。。

2004-12-31 15:40:44 初六无云(359062004)
传一个 command 比较好,还可以自己检验

2004-12-31 15:40:58 /:>D10.天地弦(185511468)
function TMLRDataModule.ProcessData(ModuleIndex, ActionIndex: Integer;
  var Data, Msg: OleVariant): WordBool;
begin
  try
    result := TFrameworkServices.ItSelf[ID].ModelService[ModuleIndex].ProcessData(Id, ActionIndex, Data, Msg) = S_OK;
    result := true;
  except
    result := false;    //
  end;
end; 

2004-12-31 15:41:08 /:>D10.天地弦(185511468)
好我们现在来看这个函数

2004-12-31 15:41:50 /:>D10.天地弦(185511468)
这里就是中间层处理的东东了

2004-12-31 15:41:52 C9. 随风飘(87450854)
可惜  还能看到A1的代码

2004-12-31 15:41:59 /:>D10.天地弦(185511468)
兄弟,别顶

2004-12-31 15:42:03 乾隆(7891551)
水平高的人你们为什么不象D10样我偶讲课,呵呵

2004-12-31 15:42:13 A3.武稀松(42088303)
不说别的.每种模式都有许多种分支.
D10 继续

2004-12-31 15:42:34 神王(375867424)
大哥,继承

2004-12-31 15:42:44 乾隆(7891551)
接着讲这个函数吧,还是看不懂

2004-12-31 15:42:49 /:>D10.天地弦(185511468)
中间层收到信息后,要做的事就是要找到对应的模块来处理信息

2004-12-31 15:43:05 乾隆(7891551)
是,这个知道

2004-12-31 15:43:06 D3天之痕若虹(86278566)
ID 如何同步呢?

2004-12-31 15:43:31 C9. 随风飘(87450854)
然后通过模块处理后的 DATA 再返回?

2004-12-31 15:43:33 乾隆(7891551)
ID啥意思,

2004-12-31 15:43:50 D3天之痕若虹(86278566)
ItSelf[ID]

2004-12-31 15:43:51 /:>D10.天地弦(185511468)
现在我们来看中间层是如果来做要做的事的

2004-12-31 15:44:33 /:>D10.天地弦(185511468)
现在,我们来看看,这里和A1走的可能不太一样

2004-12-31 15:44:36 A1.Aleyn.wu(45198124)
D10继续。

2004-12-31 15:44:55 乾隆(7891551)

2004-12-31 15:45:19 /:>D10.天地弦(185511468)
这里我讲一下中间层和模块之间的几个接口

2004-12-31 15:45:33 西门吹风㊣(48542332)
unit MLInterface; 


2004-12-31 15:46:30 /:>D10.天地弦(185511468)
  IModelInfo = interface //模块基本信息接口
    procedure GetModelInfo(var ModelInfo: OleVariant); stdcall;
    function GetModelInfoData(): OleVariant; stdcall;
    function SetModelConfig(FixDataBase: Boolean; ConnString: WideString): HResult; stdcall;
  end;

  IModelService = interface //模块操作接口
    function ProcessData(OwnId: Cardinal; ActionIndex: Integer; var Data, Msg: OleVariant): HResult; stdcall;

    //主程序调用此函数关闭模块操作
    function CloseModel(): HResult; stdcall;
  end;

  IFrameworkService = interface //框架提供接口
    function GetID(): Cardinal; stdcall;
    function GetModelService(ModelIndex: Integer): IModelService; stdcall;
    function GetFrameWorkInfo(ActionIndex: Integer; var Data, Msg: OleVariant): HResult; stdcall;
    property ModelService[ModelIndex: Integer]: IModelService read GetModelService; default;
  end;

  IFrameworkServices = interface //框架集接口(通过该接口查得到框架服务接口)
    function GetFrameworkService(_id: Integer): IFrameworkService; stdcall;
    property FrameworkServices[_id: Integer]: IFrameworkService read GetFrameworkService; default;
  end;
 

2004-12-31 15:47:02 hellfire(149902352)
一个一个来吧!贴得好像有点多[:D]

2004-12-31 15:47:09 /:>D10.天地弦(185511468)
这是中间层的几个接口

2004-12-31 15:47:20 /:>D10.天地弦(185511468)
好的

  IModelInfo = interface //模块基本信息接口
    procedure GetModelInfo(var ModelInfo: OleVariant); stdcall;
    function GetModelInfoData(): OleVariant; stdcall;
    function SetModelConfig(FixDataBase: Boolean; ConnString: WideString): HResult; stdcall;
  end;

2004-12-31 15:47:34 /:>D10.天地弦(185511468)
其实这里我多写了一个函数
  IModelInfo = interface //模块基本信息接口
    function GetModelInfoData(): OleVariant; stdcall;
    function SetModelConfig(FixDataBase: Boolean; ConnString: WideString): HResult; stdcall;
  end;

2004-12-31 15:48:30 /:>D10.天地弦(185511468)
这个接口就这样就可以的

2004-12-31 15:48:30 西门吹风㊣(48542332)
获取模块信息

2004-12-31 15:48:48 乾隆(7891551)
这是在定义接口吧

2004-12-31 15:48:55 西门吹风㊣(48542332)

2004-12-31 15:49:23 /:>D10.天地弦(185511468)
模块通过实现这个接口,来让中层间获取模块信息

2004-12-31 15:49:38 /:>D10.天地弦(185511468)
定义接口,就是制定协议

2004-12-31 15:49:51 D3天之痕若虹(86278566)
yes

2004-12-31 15:49:51 /:>D10.天地弦(185511468)
  IModelService = interface //模块操作接口
    function ProcessData(OwnId: Cardinal; ActionIndex: Integer; var Data, Msg: OleVariant): HResult; stdcall;

    //主程序调用此函数关闭模块操作
    function CloseModel(): HResult; stdcall;
  end;

2004-12-31 15:50:05 /:>D10.天地弦(185511468)
好来看第二个接口

2004-12-31 15:50:15 乾隆(7891551)
给我讲讲调接口与客户端直接调用通过中间层的函数又什么好处?
 
2004-12-31 15:50:31 西门吹风㊣(48542332)
先听吧

2004-12-31 15:50:44 乾隆(7891551)
好吧,基础太差[:'(]

2004-12-31 15:51:01 /:>D10.天地弦(185511468)
模块通过实现该接口,来让中间层执行数据处理操作

2004-12-31 15:51:03   冷俊(76437853)
我好吃力的说


2004-12-31 15:51:19 hellfire(149902352)
明白

2004-12-31 15:51:20 神王(375867424)
听完了,慢慢去想

2004-12-31 15:51:38 西门吹风㊣(48542332)
对,慢慢消化

2004-12-31 15:51:43 /:>D10.天地弦(185511468)
    function ProcessData(OwnId: Cardinal; ActionIndex: Integer; var Data, Msg: OleVariant): HResult; stdcall;

这个函数,和中间层提供的给客户端的差不多

2004-12-31 15:51:53 /:>D10.天地弦(185511468)
只是多了一个OwnId

2004-12-31 15:52:02 /:>D10.天地弦(185511468)
我们先不管,

2004-12-31 15:52:16 神王(375867424)
这凼数功能是什么

2004-12-31 15:52:21 /:>D10.天地弦(185511468)
知道是用来调用模块处理数据的就行了

2004-12-31 15:52:27 /:>D10.天地弦(185511468)
调用模块处理数据的就行了

2004-12-31 15:52:40 B1.斜阳(249208513)
D10的目的是不是想先通过一个简单、一致的接口,让客户端可以方便地同中间层通讯。

2004-12-31 15:52:48 西门吹风㊣(48542332)
对,具体怎么实现,后面讲

2004-12-31 15:52:55 /:>D10.天地弦(185511468)
嗯,

2004-12-31 15:53:13 神王(375867424)
先建立通信机制

2004-12-31 15:53:26   冷俊(76437853)
HResult 这个什么意思?

2004-12-31 15:53:31 B1.斜阳(249208513)
然后在中间层中,通过实现约定的接口来扩展中间层能提供的服务数量

2004-12-31 15:53:31 /:>D10.天地弦(185511468)
自己再加模块的时候就,自己制定ActionIndex的协议就行了

2004-12-31 15:53:54 /:>D10.天地弦(185511468)
HResult 其实就是一个Integer类型

2004-12-31 15:54:07 /:>D10.天地弦(185511468)
    //主程序调用此函数关闭模块操作
    function CloseModel(): HResult; stdcall;

2004-12-31 15:54:18 D3天之痕若虹(86278566)
客户只要告诉服务器,想做什么的。。
而什么的做,由谁(哪个子模块来完成)。。就由服务端定义实现。。而这个对客户是不关心的

2004-12-31 15:54:51 /:>D10.天地弦(185511468)
这个接口,是告诉模块,中间层要关闭了,进行一行必须的释放工作

2004-12-31 15:54:59 B1.斜阳(249208513)
我感觉这个由谁做好像也是客户端指定的

2004-12-31 15:55:20 神王(375867424)
应该是

2004-12-31 15:55:26 /:>D10.天地弦(185511468)
是有点这样的意思

2004-12-31 15:55:46 西门吹风㊣(48542332)
客户端传递ModuleIndex决定 

2004-12-31 15:55:47 /:>D10.天地弦(185511468)
249208513(B1.斜阳) 15:54:59
我感觉这个由谁做好像也是客户端指定的 -->是客户端与模块之样的协议一样

2004-12-31 15:56:00 B1.斜阳(249208513)
而中间层,只是起到一个转发的中介的作用

2004-12-31 15:56:07 D3天之痕若虹(86278566)
由谁完成操作请请,应该服务端定义。

2004-12-31 15:56:11 /:>D10.天地弦(185511468)

2004-12-31 15:56:21 神王(375867424)
明白

2004-12-31 15:56:32 /:>D10.天地弦(185511468)
  IFrameworkService = interface //框架提供接口
    function GetID(): Cardinal; stdcall;
    function GetModelService(ModelIndex: Integer): IModelService; stdcall;
    function GetFrameWorkInfo(ActionIndex: Integer; var Data, Msg: OleVariant): HResult; stdcall;
    property ModelService[ModelIndex: Integer]: IModelService read GetModelService; default;
  end;

2004-12-31 15:56:39 /:>D10.天地弦(185511468)
再看一个接口

2004-12-31 15:57:11 /:>D10.天地弦(185511468)
框架提供的接口

2004-12-31 15:57:25 神王(375867424)
这个接口实现什么功能

2004-12-31 15:57:34 D3天之痕若虹(86278566)
恩,说说各个函数的功能

2004-12-31 15:57:40 /:>D10.天地弦(185511468)
中间层会为每个客户端连接,实现一个这样的接口

2004-12-31 15:57:58 /:>D10.天地弦(185511468)
这个接口,是给模块里调用的

2004-12-31 15:58:29 /:>D10.天地弦(185511468)
我先不说吧,后面说

2004-12-31 15:58:45 /:>D10.天地弦(185511468)
  IFrameworkServices = interface //框架集接口(通过该接口查得到框架服务接口)
    function GetFrameworkService(_id: Integer): IFrameworkService; stdcall;
    property FrameworkServices[_id: Integer]: IFrameworkService read GetFrameworkService; default;
  end;

2004-12-31 15:58:57 /:>D10.天地弦(185511468)
最后一个接口

2004-12-31 15:59:33 /:>D10.天地弦(185511468)
是中间层为了维护所有的框架集而实现的接口

2004-12-31 15:59:49 乾隆(7891551)
框架服务是指什么啊

2004-12-31 16:00:03 /:>D10.天地弦(185511468)
可以利用该接口来得到一个框架服务接口

2004-12-31 16:00:58 /:>D10.天地弦(185511468)
一个框架就像一个平台一样,框架的服务就是为活动在这个平台上的模块实现的服务

2004-12-31 16:01:42 乾隆(7891551)
好象明白点了再具体点比方下

2004-12-31 16:01:46 /:>D10.天地弦(185511468)
现在我们再回到
function TMLRDataModule.ProcessData(ModuleIndex, ActionIndex: Integer;
  var Data, Msg: OleVariant): WordBool;
begin
  try
    result := TFrameworkServices.ItSelf[ID].ModelService[ModuleIndex].ProcessData(Id, ActionIndex, Data, Msg) = S_OK;
    result := true;
  except
    result := false;    //
  end;
end;

2004-12-31 16:01:47 神王(375867424)
是不是就是的到另外一接口

2004-12-31 16:02:03 /:>D10.天地弦(185511468)
==,我想想

2004-12-31 16:02:06 D3天之痕若虹(86278566)
是的...
好比电话主机,谁打入,它会帮助转到对应的分机号

2004-12-31 16:02:38 乾隆(7891551)
哦框架接口就是这个电话主机,对吧

2004-12-31 16:02:40 神王(375867424)
好比网络协议传输一样

2004-12-31 16:02:43 /:>D10.天地弦(185511468)
先按自己的想像来理解一下吧,后面说完应该会明的

2004-12-31 16:03:01 西门吹风㊣(48542332)
按你的思路继续

dkFramework_gif_4.gif

<图四>中间层与模块通讯图



2004-12-31 16:03:17 /:>D10.天地弦(185511468)
这是三个主要的接口

2004-12-31 16:03:41 /:>D10.天地弦(185511468)
现在我们来看中间层是如果来做要做的事的 

2004-12-31 16:03:54 /:>D10.天地弦(185511468)
现在我们来看中间层是如何来做要做的事的

2004-12-31 16:04:04 /:>D10.天地弦(185511468)
    result := TFrameworkServices.ItSelf[ID].ModelService[ModuleIndex].ProcessData(Id, ActionIndex, Data, Msg) = S_OK;

2004-12-31 16:04:04 乾隆(7891551)
又贴了我就看不到啊

2004-12-31 16:04:29 /:>D10.天地弦(185511468)
是中间层与模块的通讯里的图

2004-12-31 16:04:33 /:>D10.天地弦(185511468)
    result := TFrameworkServices.ItSelf[ID].ModelService[ModuleIndex].ProcessData(Id, ActionIndex, Data, Msg) = S_OK; 
大家可以看明上面这句吗?

2004-12-31 16:04:54 乾隆(7891551)
 不可以

2004-12-31 16:05:21 /:>D10.天地弦(185511468)
看看
TFrameworkServices.ItSelf
是什么样的函数

2004-12-31 16:05:22 西门吹风㊣(48542332)
TFrameworkServices.ItSelf[ID] 创建一个实例

2004-12-31 16:05:25 A3.武稀松(42088303)
是不是要查一下,因为如果你的模块做成可扩充插入的话.可能要先查一下存不存在

2004-12-31 16:05:39 /:>D10.天地弦(185511468)
是的

2004-12-31 16:06:03 hellfire(149902352)
停一下.我看看TFrameworkServices.ItSelf

2004-12-31 16:06:19 /:>D10.天地弦(185511468)
现在我们来看中间层是如何来做要做的事的 (就是要把信息转发给模块),主要是要找到模块

2004-12-31 16:06:33 /:>D10.天地弦(185511468)
大家看看
TFrameworkServices.ItSelf的实现

2004-12-31 16:07:15 /:>D10.天地弦(185511468)
麻烦贴一下代码

2004-12-31 16:07:21 西门吹风㊣(48542332)
通过 TFrameworkServices的ModelService 中的ModuleIndex 模块 的ProcessData 函数去操作数据库

2004-12-31 16:07:29 D3天之痕若虹(86278566)
class function ItSelf: TFrameworkServices;
{$J+}

class function TFrameworkServices.ItSelf: TFrameworkServices;
const
  FInstance: TFrameworkServices = nil;
begin
  if FInstance = nil then
  begin
    FInstance := TFrameworkServices(TFrameworkServices.NewInstance());
    FInstance.Create();
  end;
  result := FInstance;
end;          //创建一个实列
{$J-}

2004-12-31 16:07:49 西门吹风㊣(48542332)
注意{$J+}

2004-12-31 16:07:53 /:>D10.天地弦(185511468)
是的

2004-12-31 16:08:01 /:>D10.天地弦(185511468)
 这里用了一个设计模式

2004-12-31 16:08:06 /:>D10.天地弦(185511468)
Singleton 模式
单件模式

2004-12-31 16:08:22 D3天之痕若虹(86278566)
单一模式

2004-12-31 16:08:29 西门吹风㊣(48542332)
设计模式的一种

2004-12-31 16:08:49 hellfire(149902352)
这里慢点,我都还没看清,就过了

2004-12-31 16:09:19 西门吹风㊣(48542332)
这里开始难以搞懂

2004-12-31 16:09:33 /:>D10.天地弦(185511468)
是在整个框架中,访问这个函数,得到都是同一个实例

2004-12-31 16:09:42 /:>D10.天地弦(185511468)
还没有过


2004-12-31 16:09:57 D3天之痕若虹(86278566)
const
  FInstance: TFrameworkServices = nil; //为什么可定成const呢

2004-12-31 16:10:28 /:>D10.天地弦(185511468)
呵呵,不想定义全局变量,就这样定义了

2004-12-31 16:10:40 hellfire(149902352)
这个函数在哪个单元

2004-12-31 16:10:56 /:>D10.天地弦(185511468)
FrameworkServiceImp

2004-12-31 16:11:13 /:>D10.天地弦(185511468)
大家可以看明不?

2004-12-31 16:11:26 hellfire(149902352)
Tks.找到了

2004-12-31 16:11:32 hellfire(149902352)
明白

2004-12-31 16:11:49 D3天之痕若虹(86278566)
  if FInstance = nil then
  begin
    FInstance := TFrameworkServices(TFrameworkServices.NewInstance());
    FInstance.Create();
  end;
//这个 if 有必要吗。。。

2004-12-31 16:11:57 /:>D10.天地弦(185511468)
当然有

2004-12-31 16:12:10 D3天之痕若虹(86278566)
直接写不就可以。。。
你申请时已是nil了

2004-12-31 16:12:19 /:>D10.天地弦(185511468)
第二次就不为Nil了

2004-12-31 16:12:26 西门吹风㊣(48542332)
讲一讲{j+}

2004-12-31 16:12:28 D3天之痕若虹(86278566)
恩,原来如此

2004-12-31 16:12:32 /:>D10.天地弦(185511468)
hehe

2004-12-31 16:12:35 西门吹风㊣(48542332)
就明白了

2004-12-31 16:12:45 西门吹风㊣(48542332)
不论是{$J+}或{$J-}, 以const VarName = const value; 定义的常数(
没有加上型别宣告), 是一个真正的常数, 其它的程序不可以改变其内容。
其实{$J+}时还有一个妙用, 那就是宣告出类似C语言static的变量, 换句话说,
产生了一个与Application相同生命周期的变量。在这种情形下, 变量只在第一
次使用时才会建立, 函数或程序结束时, 该变量也不会消灭, 下一次再呼叫到这个函数
或程序时, 我们仍然可以参考到上次执行结束时的值。让我们试一下这个例子:
{$J+}
procedure TForm1.Button1Click(Sender: TObject);
const
i: integer = 0;
begin
ShowMessage(IntToStr(i));
Inc(i);
ShowMessage(IntToStr(i));
end;
第一次执行时, 我们分别会看到「0」「1」, 再点一次这个按钮时, 看到的将是「1」「2」。

2004-12-31 16:12:53 西门吹风㊣(48542332)
太多了,呵呵

2004-12-31 16:12:54 /:>D10.天地弦(185511468)
修改Const变量,要使用{$J+}

2004-12-31 16:13:21 /:>D10.天地弦(185511468)
明了?,这里要过了

2004-12-31 16:13:29 湖北人(364076660)
==

2004-12-31 16:13:30 D3天之痕若虹(86278566)

2004-12-31 16:13:49 神王(375867424)
明白,

2004-12-31 16:14:15 /:>D10.天地弦(185511468)
TFrameworkServices.ItSelf这个就是得到一个TFrameworkServices实例,得到这个实例,是整个框架中唯一的实例

2004-12-31 16:14:30 C06.文/yb(4184443)
D10哥,讲了多少了!我刚开完会啊!真晕!

2004-12-31 16:14:45 /:>D10.天地弦(185511468)
你看看记录

2004-12-31 16:14:52 C06.文/yb(4184443)
哦!

2004-12-31 16:14:55 /:>D10.天地弦(185511468)
我慢慢讲,你慢慢跟

2004-12-31 16:15:00 /:>D10.天地弦(185511468)
TFrameworkServices.ItSelf这个就是得到一个TFrameworkServices实例,得到这个实例,
是整个框架中唯一的实例 

2004-12-31 16:15:02 C06.文/yb(4184443)
哦!

2004-12-31 16:15:19 /:>D10.天地弦(185511468)
明这句话了,就明了刚刚那段

2004-12-31 16:15:54 /:>D10.天地弦(185511468)
我继续了

2004-12-31 16:15:59 /:>D10.天地弦(185511468)
  TFrameworkServices = class(TdkObjectList, IFrameworkServices)
  private
    function GetFrameworkService(_id: Integer): IFrameworkService; stdcall;
  public
    constructor Create(); //
    class function ItSelf: TFrameworkServices;
  public
    property FrameworkServices[_id: Integer]: IFrameworkService read GetFrameworkService; default;
  end;        //
 

2004-12-31 16:16:09 /:>D10.天地弦(185511468)
我们来看看这个类

2004-12-31 16:16:20 D3天之痕若虹(86278566)
就是说
class function TFrameworkServices.ItSelf: TFrameworkServices;
只真正创建一个实例?

2004-12-31 16:16:28 /:>D10.天地弦(185511468)

2004-12-31 16:16:36 /:>D10.天地弦(185511468)
看完了没有,这个类

2004-12-31 16:16:50 /:>D10.天地弦(185511468)
这里和A1的不太一样

2004-12-31 16:17:05 乾隆(7891551)
崇拜死了,D10delphi这么精通了啊

2004-12-31 16:17:09 /:>D10.天地弦(185511468)
就是查找模块这个功能

2004-12-31 16:17:18 /:>D10.天地弦(185511468)

2004-12-31 16:17:29 /:>D10.天地弦(185511468)
应该是各位老大,

2004-12-31 16:17:38 西门吹风㊣(48542332)
继续

2004-12-31 16:17:40 /:>D10.天地弦(185511468)
TFrameworkServices.ItSelf[ID]

2004-12-31 16:18:01 /:>D10.天地弦(185511468)
这一句和
TFrameworkServices.ItSelf.FrameworkServices[ID] 一样的

2004-12-31 16:18:05 /:>D10.天地弦(185511468)
大家明不


2004-12-31 16:18:45 /:>D10.天地弦(185511468)
知道,3弟,你讲一下

2004-12-31 16:19:05 D3天之痕若虹(86278566)
class function ItSelf: TFrameworkServices;
定义的类型是一样的。。。

2004-12-31 16:19:30 /:>D10.天地弦(185511468)
TFrameworkServices.ItSelf这一部分可以不用讲了解

2004-12-31 16:19:42 /:>D10.天地弦(185511468)
TFrameworkServices.ItSelf这一部分可以不用讲了

2004-12-31 16:20:05 /:>D10.天地弦(185511468)
3弟,讲一下

2004-12-31 16:20:09 /:>D10.天地弦(185511468)
TFrameworkServices.ItSelf[ID]
这一句和
TFrameworkServices.ItSelf.FrameworkServices[ID]
一样的

2004-12-31 16:20:24 hellfire(149902352)
是不是跟FieldByName和Fields[]一个意思

2004-12-31 16:20:32 D3天之痕若虹(86278566)
我看一下

2004-12-31 16:20:57 /:>D10.天地弦(185511468)
hellfire我没有看,应该差不多

2004-12-31 16:21:30 乾隆(7891551)
TFrameworkServices.ItSelf[ID] 这句作用是什么啊,通俗点说下啊

2004-12-31 16:22:00 神王(375867424)
这两句都在上面的CLASS中,对吗

2004-12-31 16:22:09 神王(375867424)
TFrameworkServices.ItSelf[ID]
这一句和
TFrameworkServices.ItSelf.FrameworkServices[ID]
一样的

2004-12-31 16:22:12 /:>D10.天地弦(185511468)
我来说吧

2004-12-31 16:22:30   冷俊(76437853)
TFrameworkServices.ItSelf[ID] 这句作用是什么啊,通俗点说下啊
 

2004-12-31 16:22:37 /:>D10.天地弦(185511468)
TFrameworkServices.ItSelf是得到一个实例大家都知道了

2004-12-31 16:22:47 /:>D10.天地弦(185511468)
TFrameworkServices.ItSelf.FrameworkServices[ID] 

2004-12-31 16:23:04 B1.斜阳(249208513)
var
  ts: TStringList;
begin
  ts := TStringList.Create;
  ts.Add('aaaaa');
  Caption := ts[0];
  ts.Free
end;

2004-12-31 16:23:04 D3天之痕若虹(86278566)
TFrameworkServices.ItSelf[ID]
TFrameworkServices.ItSelf.FrameworkServices[ID]

都 返回一个IFrameworkService有接口?

2004-12-31 16:23:06 /:>D10.天地弦(185511468)
FrameworkServices是这个实例的一个属性

2004-12-31 16:23:11 /:>D10.天地弦(185511468)
是的

2004-12-31 16:23:25 /:>D10.天地弦(185511468)
嗯和TStringList一样的

2004-12-31 16:23:33 B1.斜阳(249208513)
知道这个是啥意思吧,和D10的用法是一样的

2004-12-31 16:23:35 神王(375867424)
刚听掉了一点,有点接不上了

2004-12-31 16:23:35 /:>D10.天地弦(185511468)
真高兴,看到B1还在

2004-12-31 16:24:01 /:>D10.天地弦(185511468)
  TFrameworkServices = class(TdkObjectList, IFrameworkServices)
  private
    function GetFrameworkService(_id: Integer): IFrameworkService; stdcall;
  public
    constructor Create(); //
    class function ItSelf: TFrameworkServices;
  public
    property FrameworkServices[_id: Integer]: IFrameworkService read GetFrameworkService; default;
  end;        //

2004-12-31 16:24:14 /:>D10.天地弦(185511468)
这上属性,你们看看property FrameworkServices[_id: Integer]: IFrameworkService read GetFrameworkService; default;
 

2004-12-31 16:24:18 /:>D10.天地弦(185511468)
这一句

2004-12-31 16:24:28 神王(375867424)
看到了

2004-12-31 16:24:30 乾隆(7891551)
哪点和Tstringlist的用法一样啊,没看出来

2004-12-31 16:24:51 /:>D10.天地弦(185511468)
249208513(B1.斜阳) 16:23:04
var
  ts: TStringList;
begin
  ts := TStringList.Create;
  ts.Add('aaaaa');
  Caption := ts[0];
  ts.Free
end; 

2004-12-31 16:25:00 B1.斜阳(249208513)
ItSelf[ID]

ts[0]

2004-12-31 16:25:06 /:>D10.天地弦(185511468)
上面的ts[0]就是ts.items[0]

2004-12-31 16:25:22 B1.斜阳(249208513)
是ts.Strings[0]

2004-12-31 16:25:27 /:>D10.天地弦(185511468)
呵呵

2004-12-31 16:25:29 /:>D10.天地弦(185511468)

2004-12-31 16:25:35 乾隆(7891551)
哦,明白了

2004-12-31 16:25:53 B1.斜阳(249208513)
主要是default关键字,如果不知道,看看语法书对default的定义吧

2004-12-31 16:26:06 /:>D10.天地弦(185511468)
对主要是Default关键字

2004-12-31 16:26:20 西门吹风㊣(48542332)
讲一下

2004-12-31 16:26:26 /:>D10.天地弦(185511468)
在属性上加一个Default关键字,就可以像数组一样访问了

2004-12-31 16:26:36 D3天之痕若虹(86278566)
property FrameworkServices[_id: Integer]: IFrameworkService read GetFrameworkService; default;
-----
是保持FrameworkServices[_id: Integer]的持久性...

2004-12-31 16:27:47 乾隆(7891551)
哦,是不是加个Default就可以按照[0]取第几个方法了

2004-12-31 16:27:52 /:>D10.天地弦(185511468)
对的

2004-12-31 16:27:59 /:>D10.天地弦(185511468)
property FrameworkServices[_id: Integer]: IFrameworkService read GetFrameworkService; default;

2004-12-31 16:28:09 /:>D10.天地弦(185511468)
看看类的这个属性

2004-12-31 16:28:10 hellfire(149902352)
了解[:D]

2004-12-31 16:28:12 /:>D10.天地弦(185511468)
加了一个Default

2004-12-31 16:28:22 /:>D10.天地弦(185511468)
加了一个Default

2004-12-31 16:28:26 神王(375867424)
明白

2004-12-31 16:28:30 /:>D10.天地弦(185511468)
呵呵,以前我也不知道,A1骂出来的

2004-12-31 16:28:51 C03.MUSIC(281361369)
给A1记一等功

2004-12-31 16:29:11 神王(375867424)
我请他[coffee]

2004-12-31 16:29:12 /:>D10.天地弦(185511468)
TFrameworkServices.ItSelf[ID]这样就是调用了

2004-12-31 16:29:23 D3天之痕若虹(86278566)
[:P]

2004-12-31 16:29:25 B1.斜阳(249208513)
要想知道树有多高,不要去看一片叶子,要站在远处去看树的整体。
不要在这些细节上纠缠了,听讲

2004-12-31 16:29:34 /:>D10.天地弦(185511468)
这个实例的
function GetFrameworkService(_id: Integer): IFrameworkService; stdcall;

2004-12-31 16:29:47 /:>D10.天地弦(185511468)

2004-12-31 16:30:19 /:>D10.天地弦(185511468)
TFrameworkServices.ItSelf[ID]这样就是调用了这个实例的
GetFrameworkService(_id: Integer): IFrameworkService; 方法,返回一个IFrameWorkService接口

2004-12-31 16:30:32 /:>D10.天地弦(185511468)
TFrameworkServices.ItSelf[ID]返回一个IFrameWorkService接口

2004-12-31 16:30:48 西门吹风㊣(48542332)
明白了

2004-12-31 16:31:00 /:>D10.天地弦(185511468)
TFrameworkServices.ItSelf[ID].ModelService[ModuleIndex]

2004-12-31 16:31:30 /:>D10.天地弦(185511468)
之后的ModelService[ModuleIndex] 也就是返回一个IModelService接口

2004-12-31 16:32:00 /:>D10.天地弦(185511468)
也是使用了同样的方法

2004-12-31 16:32:37 /:>D10.天地弦(185511468)
然后再调用该接口的方法ProcessData来处理数据

2004-12-31 16:32:51 /:>D10.天地弦(185511468)
这样中间层的任务就完成了

2004-12-31 16:33:08 /:>D10.天地弦(185511468)
大家记得中间层的任务吗?

2004-12-31 16:33:40 神王(375867424)
总结一下,我刚听掉了一些

2004-12-31 16:34:08 /:>D10.天地弦(185511468)
3弟,中间层的任务是什么?

2004-12-31 16:34:21 A3.武稀松(42088303)
YWLJ

2004-12-31 16:34:38 /:>D10.天地弦(185511468)
YWLJ是什么?

2004-12-31 16:34:57 A3.武稀松(42088303)
你刚才问的答案

2004-12-31 16:35:05 神王(375867424)
大哥,总结一下

2004-12-31 16:35:33 /:>D10.天地弦(185511468)
不懂,

2004-12-31 16:35:36 D3天之痕若虹(86278566)
晕,刚掉了。。

2004-12-31 16:35:39 C9. 随风飘(87450854)
对 D10 总结下拉 

2004-12-31 16:35:42 A3.武稀松(42088303)
拼音而已[;P]

2004-12-31 16:36:36 /:>D10.天地弦(185511468)
中间层的任务就是
找到对应的模块接口,接参数传递到模块进行处理

2004-12-31 16:36:45 /:>D10.天地弦(185511468)
还没有

2004-12-31 16:36:56   冷俊(76437853)
哦 那就继续 

2004-12-31 16:37:00 A3.武稀松(42088303)
晕倒.看来我说错了

2004-12-31 16:37:05 /:>D10.天地弦(185511468)
今天还要不要继续

2004-12-31 16:37:06 D3天之痕若虹(86278566)
就是根据client里传的ModuleIndex, ActionIndex
 先初始相关模块。。
 然后人在再由模块管理中心,查

2004-12-31 16:37:22 /:>D10.天地弦(185511468)
中间层的任务就是
找到对应的模块接口,将参数传递到模块进行处理 

2004-12-31 16:37:28 D3天之痕若虹(86278566)
找对应的处理模块,来做出相应的处理。。

2004-12-31 16:37:35 /:>D10.天地弦(185511468)
ye

2004-12-31 16:37:48 神王(375867424)
谢谢,继续

2004-12-31 16:37:53 D3天之痕若虹(86278566)
不好意思,我表达能力不行。。。

2004-12-31 16:38:00 A3.武稀松(42088303)
D10还有的话就继续啊

2004-12-31 16:38:10 /:>D10.天地弦(185511468)
3哥,我还以为你不在了

2004-12-31 16:38:25 乾隆(7891551)
找对应模块是靠ModelService[ModuleIndex]
这句吧

2004-12-31 16:38:34 /:>D10.天地弦(185511468)
TFrameworkServices.ItSelf[ID].ModelService[ModuleIndex].ProcessData(Id, ActionIndex, Data, Msg)

2004-12-31 16:38:43 /:>D10.天地弦(185511468)
就是这一句,就是中间层要做的事了

2004-12-31 16:39:18 /:>D10.天地弦(185511468)
乾隆,是的

2004-12-31 16:39:21 D3天之痕若虹(86278566)
我有个不明白的地方,就是ID什么弄呢

2004-12-31 16:39:21 A3.武稀松(42088303)
我在工作.隔2分钟才看一次

2004-12-31 16:39:31 /:>D10.天地弦(185511468)
呵呵,

2004-12-31 16:39:41 /:>D10.天地弦(185511468)
ID是什么,就是等下要讲的了

2004-12-31 16:40:05   冷俊(76437853)
看来还是我这个菜鸟 敬课

2004-12-31 16:40:20 /:>D10.天地弦(185511468)
慢慢来

2004-12-31 16:40:24 A1.Aleyn.wu(45198124)
我和A3差不多,工作中,每隔几份钟上来看。

2004-12-31 16:40:29 /:>D10.天地弦(185511468)

2004-12-31 16:40:35 /:>D10.天地弦(185511468)
那我们开始了

2004-12-31 16:40:42 /:>D10.天地弦(185511468)
ID是什么,大家找找

2004-12-31 16:40:44 A3.武稀松(42088303)
但是D10的课,我一定会跟到底的

2004-12-31 16:40:59 /:>D10.天地弦(185511468)
[:<],感动中

2004-12-31 16:41:06 乾隆(7891551)
TFrameworkServices.ItSelf[ID].ModelService[ModuleIndex].ProcessData(Id, ActionIndex, Data, Msg)
   找框架的哪个方法调用     调用哪个功能模块      具体执行这个功能模块
理解对不?

2004-12-31 16:41:26 /:>D10.天地弦(185511468)
乾隆,对的

2004-12-31 16:41:29 /:>D10.天地弦(185511468)
你理解了

2004-12-31 16:41:31 D3天之痕若虹(86278566)
10弟弟幸苦了 [coffee]

2004-12-31 16:41:36 /:>D10.天地弦(185511468)
hehe

2004-12-31 16:41:39 A3.武稀松(42088303)
乾隆有进步啊

2004-12-31 16:41:57 /:>D10.天地弦(185511468)
我们继续啦

2004-12-31 16:41:57 /:>D10.天地弦(185511468)
ID是什么,大家找找 

2004-12-31 16:41:59 神王(375867424)
大哥讲的很好

2004-12-31 16:42:04 /:>D10.天地弦(185511468)
[;-D]

2004-12-31 16:42:14 D3天之痕若虹(86278566)
ok

2004-12-31 16:42:17 /:>D10.天地弦(185511468)
大伙的功劳,

2004-12-31 16:42:34 神王(375867424)
回头[coffee]

2004-12-31 16:42:37 /:>D10.天地弦(185511468)
西门,你不在了

2004-12-31 16:42:44 /:>D10.天地弦(185511468)
ID是什么,大家找找

2004-12-31 16:42:46 西门吹风㊣(48542332)
在,听

2004-12-31 16:42:51 /:>D10.天地弦(185511468)
3弟,找到没有?

2004-12-31 16:42:53 D3天之痕若虹(86278566)
FThreadID: Cardinal;
 property ID: Cardinal read FThreadID;

2004-12-31 16:43:06 /:>D10.天地弦(185511468)
我们顺藤摸瓜

2004-12-31 16:43:09 D3天之痕若虹(86278566)
只读的?

2004-12-31 16:43:19 /:>D10.天地弦(185511468)
type
  TMLRDataModule = class(TRemoteDataModule, IMLRDataModule)
    procedure RemoteDataModuleCreate(Sender: TObject);
    procedure RemoteDataModuleDestroy(Sender: TObject);
  private
    { Private declarations }
    FModels: TModels; //为该客户端维护的模块列表
    FService: TFrameworkService;
    FThreadID: Cardinal;
    CurrentUser: TUser;
  protected
    class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
    function ProcessData(ModuleIndex, ActionIndex: Integer; var Data,
      Msg: OleVariant): WordBool; safecall;
    function ProcessDataEx(ActionIndex: Integer; var Data,
      Msg: OleVariant): WordBool; safecall;
  public
    { Public declarations }
    property ID: Cardinal read FThreadID;
  end;

2004-12-31 16:43:20 D3天之痕若虹(86278566)
那如何计数?

2004-12-31 16:43:45 西门吹风㊣(48542332)
 FThreadID := dkHandle.NewHandle; //为每个客户端创建一个Handle
 

2004-12-31 16:44:09 /:>D10.天地弦(185511468)
中间层为每一次客户端连结创建一个TMLRDataModule 

2004-12-31 16:44:17 /:>D10.天地弦(185511468)
大伙明白这点?

2004-12-31 16:44:37 D3天之痕若虹(86278566)
 FThreadID := dkHandle.NewHandle; //为每个客户端创建一个Handle
 这样不会被覆盖了吗?

2004-12-31 16:44:48 D3天之痕若虹(86278566)
每一次客户端连结时

2004-12-31 16:44:58 /:>D10.天地弦(185511468)

2004-12-31 16:45:11 /:>D10.天地弦(185511468)
不知道大伙清不清楚

2004-12-31 16:45:25   冷俊(76437853)
D3天之痕若虹(86278566) 16:44:37
 FThreadID := dkHandle.NewHandle; //为每个客户端创建一个Handle
 这样不会被覆盖了吗?
D3天之痕若虹(86278566) 16:44:48
每一次客户端连结时 [:>]D10.天地弦(185511468) 16:44:58

????

2004-12-31 16:45:31 D3天之痕若虹(86278566)
我的意思是指,如何保证一致性呢

2004-12-31 16:45:34 西门吹风㊣(48542332)
不是很清楚

2004-12-31 16:45:36 乾隆(7891551)
TMLRDataModule 是什么 相当与什么

2004-12-31 16:45:45 /:>D10.天地弦(185511468)
是RemoteModule

2004-12-31 16:46:07 D3天之痕若虹(86278566)
呵,稍等。。。先码部分代码看完先

2004-12-31 16:46:10 /:>D10.天地弦(185511468)
中间层为每一次客户端连结创建一个TMLRDataModule  这个是Midas
实现的功能

2004-12-31 16:46:24 /:>D10.天地弦(185511468)
3弟先别急

2004-12-31 16:46:33 /:>D10.天地弦(185511468)
西门清楚不

2004-12-31 16:46:38 西门吹风㊣(48542332)
清楚

2004-12-31 16:46:39 /:>D10.天地弦(185511468)
中间层为每一次客户端连结创建一个TMLRDataModule  这个是Midas
实现的功能 

2004-12-31 16:47:06 /:>D10.天地弦(185511468)
这个ID,只是每一次客户端连结编一个号码

2004-12-31 16:47:24 /:>D10.天地弦(185511468)
好像大家入队的编号一样,叫D3,肯定是3弟了

2004-12-31 16:47:50 D3天之痕若虹(86278566)
[:D]

2004-12-31 16:47:51 /:>D10.天地弦(185511468)
跟上没有?

2004-12-31 16:47:51   冷俊(76437853)
可不可以逃跑?

2004-12-31 16:48:06 /:>D10.天地弦(185511468)
冷俊,你可以逃了

2004-12-31 16:48:12 /:>D10.天地弦(185511468)
呵呵

2004-12-31 16:48:18 西门吹风㊣(48542332)
继续,不懂就问

2004-12-31 16:48:27 神王(375867424)
还有没有没

2004-12-31 16:48:32 /:>D10.天地弦(185511468)
这个ID,读的就是FThreadID

2004-12-31 16:49:09 /:>D10.天地弦(185511468)
FThreadID 就是在TMLRDataModule创建的时候生成的一个顺号

2004-12-31 16:49:13 神王(375867424)
这个笔记在那里

2004-12-31 16:49:22 /:>D10.天地弦(185511468)
procedure TMLRDataModule.RemoteDataModuleCreate(Sender: TObject);
begin
  FThreadID := dkHandle.NewHandle; //为每个客户端创建一个Handle

  CurrentUser := TUser.Create(FThreadID); //创建用户类
  TUsers.Users.Add(CurrentUser); //添加至用户列表

  TRemoteDataModules.ItSelf.Add(Self); //添加当前模块到列表

  FModels := TModels.Create(false);   //自己负责释放对象

  FService := TFrameworkService.Create(FModels, ID); //创建当前service;
  TFrameworkServices.ItSelf.Add(FService);           //添加到框架集里面,
end;

2004-12-31 16:49:30 /:>D10.天地弦(185511468)
  FThreadID := dkHandle.NewHandle; //为每个客户端创建一个Handle

2004-12-31 16:49:31 乾隆(7891551)
ID是不是就是连接到中间层的时候给每个连接排的序号

2004-12-31 16:49:35 /:>D10.天地弦(185511468)
看到这一句没有

2004-12-31 16:49:40 /:>D10.天地弦(185511468)

2004-12-31 16:49:44 D3天之痕若虹(86278566)
看到了

2004-12-31 16:49:50 /:>D10.天地弦(185511468)
乾隆,对的,你明了

2004-12-31 16:50:13 /:>D10.天地弦(185511468)
这个编号是为了方便查找

2004-12-31 16:50:24 A3.武稀松(42088303)
D10的ID根据什么创建的

2004-12-31 16:50:26 乾隆(7891551)
天啊,你们把类玩的太熟悉了,[:'(]

2004-12-31 16:50:46 /:>D10.天地弦(185511468)
是累加器,3哥

2004-12-31 16:50:48   冷俊(76437853)
为什么?唉 后面的听不懂了 有点迷茫了 我先工作了 一会在来看记录 今天的讲义整理了一半

2004-12-31 16:50:57 /:>D10.天地弦(185511468)
呵呵

2004-12-31 16:51:12 /:>D10.天地弦(185511468)
每创建一次就累加一次

2004-12-31 16:51:17 A3.武稀松(42088303)
我们使用的是GUID转化成字符串做唯一的ID的.呵呵

2004-12-31 16:51:23 A1.Aleyn.wu(45198124)
慢慢来,就会听懂了。

2004-12-31 16:51:36 神王(375867424)
我也是,中间掉了一些,跟不上了

2004-12-31 16:51:39 A1.Aleyn.wu(45198124)
就象D10,不用很久就学会了。

2004-12-31 16:51:44 /:>D10.天地弦(185511468)
呵呵,我开始也是这样考虑,

2004-12-31 16:51:49 乾隆(7891551)
我要坚持听下来

2004-12-31 16:51:51 C9. 随风飘(87450854)
INC(ID)?

2004-12-31 16:52:07 /:>D10.天地弦(185511468)
你看看dkHandle.newhandle

2004-12-31 16:52:10 /:>D10.天地弦(185511468)
C9

2004-12-31 16:52:11 A1.Aleyn.wu(45198124)
42088303(A3.武稀松) 16:51:17
我们使用的是GUID转化成字符串做唯一的ID的.呵呵
<-和我做的一样。

2004-12-31 16:52:28 A1.Aleyn.wu(45198124)
不过GUID是32位的,我的是16位的。

2004-12-31 16:52:31 D3天之痕若虹(86278566)
function NewHandle: Cardinal;
begin
  id := id + 1;
  result := id;
end;

2004-12-31 16:52:35 /:>D10.天地弦(185511468)
[:L]

2004-12-31 16:52:44 C9. 随风飘(87450854)
OK 看看先 

2004-12-31 16:52:51 /:>D10.天地弦(185511468)
呵呵,只是累加,和生成GUID也是一样的

2004-12-31 16:52:54 C9. 随风飘(87450854)
刚掉了线

2004-12-31 16:52:59 /:>D10.天地弦(185511468)
好了,继续

2004-12-31 16:53:01 D3天之痕若虹(86278566)
看个人用法习惯

2004-12-31 16:53:06 A3.武稀松(42088303)
A1的16位怎么搞得

2004-12-31 16:53:43 A3.武稀松(42088303)
D10继续啊

2004-12-31 16:53:53 /:>D10.天地弦(185511468)
框架为每个客户端连结维护了一个TFrameworkService,FModels: TModels; //为该客户端维护的模块列表

2004-12-31 16:54:02 /:>D10.天地弦(185511468)
继续

2004-12-31 16:54:08 /:>D10.天地弦(185511468)
框架为每个客户端连结维护了一个TFrameworkService,FModels: TModels; //为该客户端维护的模块列表

2004-12-31 16:54:17 /:>D10.天地弦(185511468)
先理解这一句

2004-12-31 16:54:29   冷俊(76437853)
舍不得走啊 我还是继续听课吧

2004-12-31 16:54:40 /:>D10.天地弦(185511468)
呵呵,慢慢听

2004-12-31 16:54:50 /:>D10.天地弦(185511468)
我讲得也很慢

2004-12-31 16:54:55 神王(375867424)
我也一样,什么事也不做

2004-12-31 16:54:59 神王(375867424)
听课

2004-12-31 16:55:09 /:>D10.天地弦(185511468)
明了上面那句没有?

2004-12-31 16:55:12 D3天之痕若虹(86278566)
FModels: TModels; //为该客户端维护的模块列表
    FService: TFrameworkService;
    FThreadID: Cardinal;
    CurrentUser: TUser;
---------------
对ClientX的管理

2004-12-31 16:55:23 hellfire(149902352)
我也上WC都没时间

2004-12-31 16:56:03 /:>D10.天地弦(185511468)
CurrentUser: TUser;还没有具体来实现,可以保存当前客户端登陆的一些信息

2004-12-31 16:56:28 /:>D10.天地弦(185511468)
选取的帐套

2004-12-31 16:56:53 D3天之痕若虹(86278566)

 

2004-12-31 16:57:17 乾隆(7891551)
为该客户端维护的模块列表 ?有什么具体作用啊

2004-12-31 16:57:18 /:>D10.天地弦(185511468)
框架为每个客户端连结维护了一个TFrameworkService,FModels: TModels;
大伙要记住这一句

2004-12-31 16:57:49 西门吹风㊣(48542332)
这句对吧
 FModels := TModels.Create(false);   //自己负责释放对象 

2004-12-31 16:57:56 /:>D10.天地弦(185511468)

2004-12-31 16:58:03 /:>D10.天地弦(185511468)
好我们继续

2004-12-31 16:58:26 乾隆(7891551)
框架为每个客户端连结维护了一个TFrameworkService,FModels: TModels;
这句再说下

2004-12-31 16:58:30 /:>D10.天地弦(185511468)
看看
procedure TMLRDataModule.RemoteDataModuleCreate(Sender: TObject);
begin
  FThreadID := dkHandle.NewHandle; //为每个客户端创建一个Handle

  CurrentUser := TUser.Create(FThreadID); //创建用户类
  TUsers.Users.Add(CurrentUser); //添加至用户列表

  TRemoteDataModules.ItSelf.Add(Self); //添加当前模块到列表

  FModels := TModels.Create(false);   //自己负责释放对象

  FService := TFrameworkService.Create(FModels, ID); //创建当前service;
  TFrameworkServices.ItSelf.Add(FService);           //添加到框架集里面,
end;
 

2004-12-31 16:58:46 D3天之痕若虹(86278566)
总框架只产生一个实现。。。。

而用户信息,含所需模块信息,就地.ItSelf.Add(FService);追加。。?

2004-12-31 16:59:22 D8。飘尘(43745429)
function NewHandle: Cardinal;
begin
  id := id + 1;
  result := id;
end; 

2004-12-31 16:59:27 D8。飘尘(43745429)
这里有错呀

2004-12-31 16:59:32 D8。飘尘(43745429)
没有独占呀

2004-12-31 16:59:32 /:>D10.天地弦(185511468)
7891551(乾隆) 16:58:26
框架为每个客户端连结维护了一个TFrameworkService,FModels: TModels;
这句再说下 ==>每个客户端连结可以通过维护的这些实例来做要做的事

2004-12-31 16:59:49 /:>D10.天地弦(185511468)
43745429(D8。飘尘) 16:59:22
function NewHandle: Cardinal;
begin
  id := id + 1;
  result := id;
end; 
43745429(D8。飘尘) 16:59:27
这里有错呀
43745429(D8。飘尘) 16:59:32
没有独占呀 =>

2004-12-31 16:59:54 /:>D10.天地弦(185511468)
晕,是没有,再加

2004-12-31 17:00:09 /:>D10.天地弦(185511468)
3弟,对的

2004-12-31 17:00:10 hellfire(149902352)
加什么

2004-12-31 17:00:29 /:>D10.天地弦(185511468)
procedure TMLRDataModule.RemoteDataModuleCreate(Sender: TObject);
begin
  FThreadID := dkHandle.NewHandle; //为每个客户端创建一个Handle
  CurrentUser := TUser.Create(FThreadID); //创建用户类
  TUsers.Users.Add(CurrentUser); //添加至用户列表

  TRemoteDataModules.ItSelf.Add(Self); //添加当前模块到列表

  FModels := TModels.Create(false);   //自己负责释放对象

  FService := TFrameworkService.Create(FModels, ID); //创建当前service;
  TFrameworkServices.ItSelf.Add(FService);           //添加到框架集里面,
end;
//看看这一段

2004-12-31 17:00:31   冷俊(76437853)
不要讲错啊 我很难找到的

2004-12-31 17:00:34 乾隆(7891551)
这句再说下 ==>每个客户端连结可以通过维护的这些实例来做要做的事

再通俗点好吗,具体维护实例怎么讲。

2004-12-31 17:00:46 乾隆(7891551)
这句再说下 ==>每个客户端连结可以通过维护的这些实例来做要做的事

再通俗点好吗,具体维护实例怎么讲。

2004-12-31 17:01:06 D3天之痕若虹(86278566)
TRemoteDataModules.ItSelf.Remove(Self);
能正确释放对应资源吗?

与这个比效TFrameworkServices.ItSelf.Add(FService);

2004-12-31 17:01:26 /:>D10.天地弦(185511468)
乾隆,你现在只要记住,每个客户端连结可以通过维护的这些实例来做要做的事 

2004-12-31 17:01:31 D3天之痕若虹(86278566)
我看传的self怪怪得[?]

2004-12-31 17:01:58 /:>D10.天地弦(185511468)
3弟,你跑快了

2004-12-31 17:02:08 D3天之痕若虹(86278566)
[;-D]

2004-12-31 17:02:21 乾隆(7891551)
好吧,就是维护具体的一个对象来实现要做的事情

2004-12-31 17:02:32 /:>D10.天地弦(185511468)
继续

2004-12-31 17:02:45 D3天之痕若虹(86278566)
听你的先。。。

2004-12-31 17:03:33 /:>D10.天地弦(185511468)
 1. FThreadID := dkHandle.NewHandle; //为每个客户端创建一个Handle

 2. CurrentUser := TUser.Create(FThreadID); //创建用户类
 3. TUsers.Users.Add(CurrentUser); //添加至用户列表

 4. TRemoteDataModules.ItSelf.Add(Self); //添加当前模块到列表

 5. FModels := TModels.Create(false);   //自己负责释放对象

 6. FService := TFrameworkService.Create(FModels, ID); //创建当前service;
 7. TFrameworkServices.ItSelf.Add(FService);           //添加到框架集里面,

2004-12-31 17:03:51 /:>D10.天地弦(185511468)
1句讲过了

2004-12-31 17:04:10 /:>D10.天地弦(185511468)
是为每个客户端连结产生一个编号

2004-12-31 17:04:32 /:>D10.天地弦(185511468)
2.是创建一个TUser对象,

2004-12-31 17:04:33 神王(375867424)
[ID]

2004-12-31 17:04:48 /:>D10.天地弦(185511468)
还没有什么用,可以用来保存一些客户端信息

2004-12-31 17:05:31 /:>D10.天地弦(185511468)
3句TUsers,和FrameworkServices一样的了,维护的是一个列表,

2004-12-31 17:05:36 D3天之痕若虹(86278566)
恩,那就从3开始

2004-12-31 17:05:41 /:>D10.天地弦(185511468)
也使用了单件模式

2004-12-31 17:05:50 乾隆(7891551)
procedure TMLRDataModule.RemoteDataModuleCreate(Sender: TObject);这个应该叫方法?
是在哪里定义的是中间层里吗

2004-12-31 17:05:58 /:>D10.天地弦(185511468)
2,3还有待完shan

2004-12-31 17:06:05 /:>D10.天地弦(185511468)
是的

2004-12-31 17:06:17 /:>D10.天地弦(185511468)
是建立的时候的事件

2004-12-31 17:06:25 D3天之痕若虹(86278566)
TRemoteDataModules.ItSelf.Add(Self); //添加当前模块到列表
 TFrameworkServices.ItSelf.Add(FService);           //添加到框架集里面,
这是不是维护了两份client信息。。。

2004-12-31 17:06:40 /:>D10.天地弦(185511468)
不是

2004-12-31 17:06:42 D3天之痕若虹(86278566)
如果信成地同一个会不会更好管理呢

2004-12-31 17:06:52 /:>D10.天地弦(185511468)
3. TRemoteDataModules.ItSelf.Add(Self); //添加当前模块到列表

2004-12-31 17:06:54  寻欢(42477914)
今天什么主题?[?]

2004-12-31 17:06:59 /:>D10.天地弦(185511468)
 4. TRemoteDataModules.ItSelf.Add(Self); //添加当前模块到列表

2004-12-31 17:07:03 /:>D10.天地弦(185511468)
这个

2004-12-31 17:07:15 神王(375867424)
3,4好好讲讲

2004-12-31 17:07:22 /:>D10.天地弦(185511468)
这个还没有什么用,后来发现好像不用,也可以

2004-12-31 17:07:26 乾隆(7891551)
procedure TMLRDataModule.RemoteDataModuleCreate(Sender: TObject);这个该叫什么模块,中间层的总调度?

2004-12-31 17:07:38 /:>D10.天地弦(185511468)
TRemoteDataModules是自己定义的一个类

2004-12-31 17:07:40   冷俊(76437853)
[:>]D10.天地弦(185511468) 17:06:17
是建立的时候的事件

什么意思?

2004-12-31 17:07:58 A3.武稀松(42088303)
185511468([:>]D10.天地弦) 17:07:22
这个还没有什么用,后来发现好像不用,也可以
-----------
半句话

2004-12-31 17:08:14 /:>D10.天地弦(185511468)
[:L]

2004-12-31 17:08:15 A1.Aleyn.wu(45198124)
[:D]

2004-12-31 17:08:34 /:>D10.天地弦(185511468)
 4. TRemoteDataModules.ItSelf.Add(Self); //添加当前模块到列表
这个还没有什么用,后来发现好像不用这样也可以 

2004-12-31 17:08:38   冷俊(76437853)
我刚发的也是半句

2004-12-31 17:08:46 A3.武稀松(42088303)
[:D]

2004-12-31 17:09:05 /:>D10.天地弦(185511468)
procedure TMLRDataModule.RemoteDataModuleCreate(Sender: TObject)
这个函数发生在什么时候有人不明吗?

2004-12-31 17:09:07 江畔绿舟(8128584)
DELPHI对象可以序列化吗?

2004-12-31 17:09:09 神王(375867424)
是为了维护每一个功能模用对吗

2004-12-31 17:09:27 /:>D10.天地弦(185511468)
procedure TMLRDataModule.RemoteDataModuleCreate(Sender: TObject)
这个函数发生在什么时候有人不明吗?

2004-12-31 17:09:32 hellfire(149902352)
不就是OnCreate事件吗

2004-12-31 17:09:39  寻欢(42477914)
呵呵

2004-12-31 17:09:44 D3天之痕若虹(86278566)
知到呀

2004-12-31 17:09:46 神王(375867424)
这个回头告诉,

2004-12-31 17:09:46 /:>D10.天地弦(185511468)
是,但是陛下好像不知道

2004-12-31 17:09:56 hellfire(149902352)
早明白了

2004-12-31 17:10:00 西门吹风㊣(48542332)
陛下?

2004-12-31 17:10:01 神王(375867424)
接着说A3问的问题

2004-12-31 17:10:01 乾隆(7891551)
是发生在中间层用来维护其他模块的吧

2004-12-31 17:10:03 C9. 随风飘(87450854)
RemoteDataModule ON CREATE

2004-12-31 17:10:06 乾隆(7891551)
告诉我啊

2004-12-31 17:10:15 /:>D10.天地弦(185511468)
事件就是当什么时候,要做的事

2004-12-31 17:10:38 /:>D10.天地弦(185511468)
陛下就是干隆

2004-12-31 17:10:43 /:>D10.天地弦(185511468)
只是陛下好打一点

2004-12-31 17:10:47 神王(375867424)
接着讲

2004-12-31 17:10:59   冷俊(76437853)
晕晕 好好讲啊

2004-12-31 17:11:01 乾隆(7891551)
RemoteDataModuleCreate这是该类的个事件啊[:$]

2004-12-31 17:11:04 /:>D10.天地弦(185511468)
乾隆掉队了,你们等等,我拿一把

2004-12-31 17:11:33 乾隆(7891551)
就是,得照顾老弱者

2004-12-31 17:11:39 C9. 随风飘(87450854)
我晕

2004-12-31 17:11:47 西门吹风㊣(48542332)
陛下:是数据模组建立时候的事件

2004-12-31 17:11:49 神王(375867424)
时间有限吗

2004-12-31 17:12:04 /:>D10.天地弦(185511468)
TMLRDataModule什么时候会创建实例

2004-12-31 17:12:06 C9. 随风飘(87450854)
我还没怎么接触这些思想

2004-12-31 17:12:18   冷俊(76437853)
不知道

2004-12-31 17:12:28 /:>D10.天地弦(185511468)
讲不完以后再开

2004-12-31 17:13:01 /:>D10.天地弦(185511468)
TMLRDataModule什么时候会创建实例 ,乾隆你明不?

2004-12-31 17:13:20 /:>D10.天地弦(185511468)
西门,你告诉他们两个

2004-12-31 17:13:31 神王(375867424)
48542332(西门吹风㊣) 17:11:47
陛下:是数据模组建立时候的事件 

2004-12-31 17:13:32 西门吹风㊣(48542332)
客户端 ProcessData的时候

2004-12-31 17:13:45 /:>D10.天地弦(185511468)
不是哦
 

2004-12-31 17:14:02 /:>D10.天地弦(185511468)
是客户端和中间层第一次连结的时候

2004-12-31 17:14:15 乾隆(7891551)
我掉线了[:'(]

2004-12-31 17:14:19 /:>D10.天地弦(185511468)
会创建一个TMLRDataModule实例

2004-12-31 17:14:26 /:>D10.天地弦(185511468)
[:L]晕

2004-12-31 17:14:32 /:>D10.天地弦(185511468)
TMLRDataModule什么时候会创建实例 ,乾隆你明不? 

2004-12-31 17:14:43 /:>D10.天地弦(185511468)
是客户端和中间层第一次连结的时候
会创建一个TMLRDataModule实例 

2004-12-31 17:14:44 西门吹风㊣(48542332)
对,我搞错了,中间层运行的时候就create

2004-12-31 17:15:09 /:>D10.天地弦(185511468)
TMLRDataModule的实例是每个客户端一份实例

2004-12-31 17:15:11 乾隆(7891551)
哦,我知道了

2004-12-31 17:15:41 /:>D10.天地弦(185511468)
    procedure RemoteDataModuleCreate(Sender: TObject);
这个事件是这个实例创建的时候发生的事件

2004-12-31 17:15:48 /:>D10.天地弦(185511468)
冷jun明不?

2004-12-31 17:16:01 /:>D10.天地弦(185511468)
这个事件就是ONCreate事件了

2004-12-31 17:16:07 D12.阿凯(107125961)
哈哈

2004-12-31 17:16:10 D12.阿凯(107125961)
明白

2004-12-31 17:16:15 /:>D10.天地弦(185511468)
在Create创建的时候发件的事件

2004-12-31 17:16:29 /:>D10.天地弦(185511468)
陛下,知道了不?

2004-12-31 17:16:35 神王(375867424)
阿兄半路出来也明白

2004-12-31 17:16:46   冷俊(76437853)
我在品  继续 谢谢

2004-12-31 17:16:57 乾隆(7891551)
哦就是当客户端和中间层第一次连结的时候,就触发中间层的RemoteDataModuleCreate事件,
做那堆初始化,维护工作了

2004-12-31 17:17:00 神王(375867424)
我中间掉了一些,后面我都>>>

2004-12-31 17:17:01 D12.阿凯(107125961)
哈哈,我边开会边看

2004-12-31 17:17:02 /:>D10.天地弦(185511468)
好了,今天讲到这里吧

2004-12-31 17:17:25 /:>D10.天地弦(185511468)
下次再找个时间继续

2004-12-31 17:17:37 hellfire(149902352)
什么时候

2004-12-31 17:17:44  寻欢(42477914)
群主真是辛苦!

2004-12-31 17:17:45 /:>D10.天地弦(185511468)
待通知

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值