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

主题:<插件式>的中间层框架
时间: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)
待通知

转载于:https://www.cnblogs.com/DKSoft/articles/85708.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt5.11 linux oracle,Qt5.11.1 + VS2017环境搭建(Qt5.11在windows上的安装)

安装视频&#xff1a;《Qt5.11在windows‘上的编译安装》安装VisualStudio2017VS2017安装包 提取码&#xff1a;7db11&#xff0c;安装vs2017请确保勾选了“通用Windows平台开发”组件&#xff0c;否则VS2017将无法用来进行开发右侧的安装详细信息部分也尽量与上图一致。安装完…

【转】Dynamics 365中的事件框架与事件执行管道(Event execution pipeline)

本文介绍了Microsoft Dynamics 365&#xff08;以下简称D365&#xff09;中的两个概念&#xff0c;事件框架&#xff08;Event Framework&#xff09;与事件执行管道&#xff08;Event execution pipeline&#xff09;。 本文适用于&#xff1a;Applies To: Dynamics 365 (onl…

【转】ABP源码分析二十:ApplicationService

IApplicationService : 空接口&#xff0c;起标识作用。所有实现了IApplicationService 的类都会被自动注入到容器中。同时所有IApplicationService对象都会被注入一些拦截器&#xff08;例如&#xff1a;auditing, UnitOfWork等&#xff09;以实现AOP AbpServiceBase&#xf…

【转】ADFS 概念与基本开发介绍

&#xff08;如您转载本文&#xff0c;必须标明本文作者及出处。如有任何疑问请与我联系 menap7.com&#xff09; ADFS 相关开发技术的中文资料相对匮乏&#xff0c;之前在弄这个东西的时候搞的比较辛苦&#xff0c;因此总结此文档&#xff0c;以解后人之忧。 本文会首先介绍…

【转】使用FiddlerCore来测试WebAPI

大家在调试Web相关的API时&#xff0c;经常会用Fiddler来查看相关的请求&#xff0c;以及返回结果。当然你也可以尝试修改或者重复发送你的请求信息。本文主要介绍如何使用代码来实现fiddler的功能。 Fiddler Core API Fiddler Core几乎实现了你能用fiddler做的所有功能。直接…

【转】程序在内存中的分布

前些天学习到了程序在虚拟内存中分布的一些知识点&#xff0c;结合在网上查阅的一些资料&#xff0c;整理一下知识点。本博客参考博主 hackbuteer1的《程序在内存中的分布》这篇文章。 v 在现代的操作系统中&#xff0c;当我们说到内存&#xff0c;往往需要分两部分来讲&#x…

GARFIELD@04-02-2005

treat 转载于:https://www.cnblogs.com/rexhost/archive/2005/04/02/130985.html

【转】TechEd第一课:新一代关系管理系统XRM**

提起微软的CRM产品&#xff0c;最先想到的是CRM 4.0。除了字面理解上的客户关系管理系统外&#xff0c;微软也赋予这款产品“应用开发平台”的角色&#xff0c;并给它一个新名字——XRM。XRM到底是什么东西&#xff1f;它能用来做什么&#xff1f;这些问题都在今天这节“微软新…

图形工具包 linux,GTK 4.0图形工具包正式发布:时隔四年的重大版本!

GTK是用于创建图形用户界面的工具包&#xff0c;GTK提供了一整套的小部件&#xff0c;适用于从小型一次性工具到完整的应用程序套件的项目。GTK是GNOME开发平台的核心&#xff0c;但是它也可以用于编写其他Linux环境的应用程序&#xff0c;以及针对微软Windows和苹果macOS的应用…

linux设备驱动学习,linux设备驱动学习4

Linux设备驱动程序学习(4)-高级字符驱动程序操作&#xff3b;(1)ioctl and llseek&#xff3d;今天进入《Linux设备驱动程序(第3版)》第六章高级字符驱动程序操作的学习。一、ioctl大部分设备除了读写能力&#xff0c;还可进行超出简单的数据传输之外的操作&#xff0c;所以设备…

[代码阅读] ECS toString实现方法

引言 ECS 提供了一种编程方式来生成以不同标记语言编写的文档。它设计为通过面向对象的抽象来生成所有标签。 ECS 目前版本为1.4.2 &#xff0c;支持 HTML 4.0 和 XML 。 因为工作原因&#xff0c;作者粗略读了ECS的部分原代码&#xff0c;着重了解ECS如果通过toString方法…

【转】设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示

设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示&#xff08;1.准备工作&#xff09; 原创 Sean Yu 云计算实战 2019-12-06 本案例适用于开发者入门理解Azure Functions/ IoT Hub / Service Bus / Power BI等几款产品。 主要实战的内容为&#xff1a; 将设备遥…

【转】Azure Messaging-ServiceBus Messaging消息队列技术系列1-基本概念和架构

前段时间研究了Window Azure ServiceBus Messaging消息队列技术&#xff0c;搞了很多技术研究和代码验证&#xff0c;最近准备总结一下&#xff0c;分享给大家。 首先&#xff0c;Windows Azure提供了两种类型的消息队列机制&#xff1a;Azure Queues和ServiceBus Queues。 其…

Atlas应用程序调试技巧

本文为翻译文章&#xff0c;原文地址&#xff1a;http://atlas.asp.net/docs/Overview/debug.aspx “Atlas”程序由服务器端代码和客户端代码组成&#xff0c;并且&#xff0c;浏览器可能会要去异步请求一些数据。那么&#xff0c;怎样才能Debug这样的web程序呢。本文将告诉…

【转】Azure Messaging-ServiceBus Messaging消息队列技术系列2-编程SDK入门

各位&#xff0c;上一篇基本概念和架构中&#xff0c;我们介绍了Window Azure ServiceBus的消息队列技术的概览。接下来&#xff0c;我们进入编程模式和详细功能介绍模式&#xff0c;一点一点把ServiceBus技术研究出来。 本章我们主要介绍ServiceBus的编程SDK编程入门。 首先…

linux octave源码安装,在Linux操作系统上安装Octave的方法

本文介绍在Ubuntu、Debian、Arch Linux、Fedora、OpenSUSE操作系统上安装Octave(也称GNU Octave)的方法&#xff0c;它还支持Flatpak方式安装。简介GNU Octave是一种用于科学和数学计算操作的解释性命令语言&#xff0c;它与Matlab兼容&#xff0c;支持各种扩展&#xff0c;允许…

linux安装静默安装was7,WAS7.0 - 安装并升级WAS7.0.0.31(静默安装)

WAS7.0 - 安装并升级WAS7.0.0.31(静默安装)安装之前需要准备的文件&#xff1a;C1G35ML.tar.gz&#xff1a;WAS7.0安装包C1G36ML.tar.gz&#xff1a;WAS升级工具7.0.0-WS-WASSDK-LinuxX64-FP0000031.pak 7.0.0-WS-WAS-LinuxX64-FP0000031.pak &#xff1a;7.0.0.31升级包&…

【转】Azure云存储及存储账户概述***

本文介绍下Azure云存储及存储账户。 1、什么是微软Azure云存储 微软Azure云存储是微软提供的云端数据存储服务&#xff0c;是一种可伸缩、持久化的数据存储服务&#xff0c;可以在Internet上被访问并按实际存储容量收费。它也可以被REST API访问&#xff0c;可以保存Azure云端…

插入法排序c语言程序,插入排序算法及C语言实现

插入排序算法是所有排序方法中最简单的一种算法&#xff0c;其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中&#xff0c;最终得到的序列就是已经排序好的数据。直接插入排序是插入排序算法中的一种&#xff0c;采用的方法是&#xff1a;在添加新的记录时&a…

【转】Microsoft Azure存储服务:存储账户****

在正式使用 Microsoft Azure 存储服务之前&#xff0c;你至少需要有一个 Azure 订阅并创建「存储账户」。Azure 订阅账户可以访问和使用各种 Azure 服务&#xff0c;在有了 Azure 订阅之后便可以开始创建「存储账户」并开始使用前面存储类型与访问中曾介绍过的 blobs、表&#…