主题:<插件式>的中间层框架
时间: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的不行
<图一>框架运作图
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)
好了,我们按照从中间层获取帐套来讲讲
<图二> 从中间层获取一个帐套数据
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数据流程图
<图三>参数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)
按你的思路继续
<图四>中间层与模块通讯图
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)
待通知