分布式COM+对象设计求解(100分)

  • 主题发起人 主题发起人 吗啡
  • 开始时间 开始时间
关注,,,
 
MTS(COM+)物件的继承
mustapha.wang

摘 要:通过继承如何把OO实作在MTS上
关键字:MTS,COM+,继承
类 别:COM &
ActiveX
如果要把OO实作在MTS上,按我们理想的继承方式,如VCL一般,应该是:
unit MTSOne;
interface
type
TMTSOne=class(TMTSAutoObject,IMTSOne)
end;
implementation
Initialization
TComponentFactory.Create(ComServer, TMTSOne, Class_MTSOne, ciMultiInstance, tmApartment);
end.

/***************************************/
unit MTSTwo;
interface
uses
MTSOne_U;
type
TMTSTwo=class(TMTSOne)
end;
end;
但是unit MTSTwo在引用unit MTSOne的时候,由于unit MTSOne的initialization部分有代码,它会在对象Two执行前执行,如果这时你企图对MTSTwo注册,会引起"不可预料的错误",另一个问题是,COM对象都是双界面的,对象Two的界面呢?你要自己加吗?你能改变对象Two的Transaction类别吗?
实际上,我们可以将企业对象的继承与MTS分开来,对象的继承如Delphi VCL一样单纯地完成,MTS作它自己的事,它负责将一般的VCL对象包装成MTS对象(我这里说的一般的VCL对象,指不含界面的Component,它不是MTS对象,不能安装在MTS的运行环境里)。具体举一个MTS员工对象的例子:先建立一个一般的Person对象,再从上继承一个一般的Worker对象,然后将它包装成MTS Worker对象。
1. 新开一个单元OBPerson_U.pas,定义一个TOBPerson类别
unit OBPerson_U;
interface
uses
MTSObj,ComObj;
type
TOBPerson =Class(TMTSAutoObject) //最上层对象要从TMTSAutoObject继承
public
procedure Say;virtual;safecall;
//要给子孙继承,定义成虚方法
end;
implementation
procedure TOBPerson.Say;
begin
ShowMessage('I am a Person.');
end;
end.
2. 用Delphi精灵产生一个MTS Object,对象类别取名为:MTSOBWorker,单元存为MTSOBWorker_U.pas,工程存为:MTSOBWork_P.dpr,Delphi会自动产生另一个单元:MTSOBWorker_P_TLB.pas
单元MTSOBWorker_U现在的宣告为:
unit MTSOBWorker;
interface
uses
MTSObj,ComObj,MTSOBWorker_P_TLB;
type
TMTSOBWorker=class(TMTSAutoObject,IMTSOBWorker)
protected
end;
implementation
initialization
TComponentFactory.Create(ComServer, TMTSOBWorker,Class_MTSOBWorker,ciMultiInstance, tmApartment);
end.
3. 新加入一个单元OBWorker_U.pas
unit OBWorker;
interface
uses
OBPerson_U;
type
TOBWorker=class(TOBPerson) //Worker从Person继承
public
procedure Say;override;safecall;
//重载祖先的方法
end;
implementation
procedure TOBWorker.Say;
begin
inherited;
ShowMessage('I am a Worker.');
end;
end.
4. 单元MTSOBWorker_U.pas引用OBWorker_U.pas单元,将TMTSAutoObject替换成TOBWorker,包装要向外提供的方法,并加入到界面中
unit MTSOBWorker;
interface
uses
MTSObj,ComObj,MTSOBWorker_P_TLB,OBWorker_U;
type
TMTSOBWorker=class(TOBWorker,IMTSOBWorker) //TMTSAutoObject被替换成TOBWorker
protected
procedure Say;override;safecall;
end;
implementation
uses ActiveX;
procedure TMTSOBWorker.Say;
//用try…except包装
begin
try
inherited;
SetComplete;
except
SetAbort;
Raise;
end;
end;
initialization
TComponentFactory.Create(ComServer, TMTSOBWorker,Class_MTSOBWorker,ciMultiInstance, tmApartment);
end.
这样,我们就从一般对象TOBPerson继承产生了一个TOBWorker一般对象,再按MTS的要求包装成了一个MTS对象TMTSOBWorker。
 
楼上的sam_sam_2000, 各位仁兄,我用delphi制作com+组件,我在TMtsDataModule中放置了
一个TADODataSet组件用于存取数据,在COM+的方法中我动态存取CommandText与Parameters,
Parameters可以做转递多个参数,
可是我还弄不清楚在COM+中怎样将TADODataSet的属性Parameters的TParameters类型做为
参数进行传递???用Parameters* 或 Varinat * 类型???应该怎样转换???
请指教???最好有demo,先谢了!!!
 
接受答案了.
 

Similar threads

回复
0
查看
888
不得闲
D
回复
0
查看
793
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部