Delphi到底能不能成功的做COM???? (200分)

  • 主题发起人 主题发起人 zla
  • 开始时间 开始时间
Z

zla

Unregistered / Unconfirmed
GUEST, unregistred user!
在COM中我想使用DataModal不行,我该如何做??
可真烦人,到底在Delphi中用Com 要注意些什么????
我的组件只是一般的COM,(ActiveX Library->COM Object建立的)但是涉及到数据控件的
操作全出错,比如Table,TDatabase等,如果我想用数据怎么办?
 
[red]Remote[/red]DataModule
 
我就是一般的COM,而不是分布式COM,也必须用Remote DataModule吗?
 
题目不清楚:
做什么操作出错?
错误是什么?
想要达到什么目的?
Data Module只是一个存放数据控件的地方,它比Form更节省资源,我做过类似的COM没问题!
 
用RemoteDataModule是最简单的,本地COM也可以用
 
重载com对象的Iniailize方法,建立数据模板。
 
ActiveX Library->COM Object建立?
我想现在很少用吧,这样建立的COM组件太底层了。没什么实际意义。除非你要开发的是一个
中介平台。
 
在一个典型的窗体界面的EXE程序里,数据模块的实例会被“自动地”建立,如下:
program test1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in '../Unit2.pas' {DataModule2: TDataModule};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
//数据模块的实例在程序启动时被建立
Application.CreateForm(TDataModule2, DataModule2);

Application.Run;
end.
而在一个COM组件的DLL文件里,并没有代码直接创建数据模块的实例,所以如果你要访问
其中的成员,自然就要出错了。因此,应重载COM组件的Initialize方法和Destroy方法,在
Initialize方法中建立数据模块的实例,在Destroy方法中销毁之。
例:
type
TWebServe = class(TASPObject, IWebServe)
private
FDM: TMyDM;
//TMyDM就是我的数据模块类名
protected
public
procedure Initialize;
override;
destructor Destroy;
override;
end;

procedure TWebServe.Initialize;
begin
inherited;
FDM := TaspDM.Create(Forms.Application);
//建立数据模块的实例
end;

destructor TWebServe.Destroy;
begin
inherited;
FDM.Free;
//销毁数据模块实例
end;
 
后退
顶部