以前提的一个问题.....(怎么没人回答?) (100分)

  • 主题发起人 主题发起人 sixeight
  • 开始时间 开始时间
S

sixeight

Unregistered / Unconfirmed
GUEST, unregistred user!
初学三层结构,我打算作一个程序,分主控模块和A,B,C三个子模块,每个子模块用DLL实现,
主控模块(.exe)中,有TDCOMConnect 连接应用服务器(ADO),但是每个子模块要连接数据库
该怎么办呢?不会是每个子模块都放一个TDCOMConnect吧?
 
我打算用Package来做,每个模块一个Package,不知是否可行,该注意些什么?
 
为什么不采用com嘛?
 
我试过直接从EXE向DLL传递TOracleSession(跟TDCOMConnect差不多的东西,它是DOA的一个组件)
结果不行,虽然第一次能取得正确结果,但后面就报地址错误了。TDCOMConnect应该也一样。
帮你提一下。
 
我认为用Package是最好的方式,这样它们可以和主程序共享一个进程。
你只要在主程序里放一个DCOMConnection,在子程序里写一个公共方法,以下以示例:
子程序:
......
type
TSubForm = class(TForm)
.....
public
//在这里声明一个方法,在主程序中调用它
procedure SetConnection(Connection : TDComConnection);
end;

implementation
procedure TSubForm.SetConnection(Connection : TDComConnection);
var
i:Integer;
Obj : TComponent;
begin
for i := 0 to ComponentCount - 1do
begin
Obj := Componnets;
if Obj is TClientDataSet then
TClientDataSet(Obj).RemoteServer := Connection;
end;
end;
......
end.

在主程序中用LoadPackage方法载入你的子程序包,然后创建TSubForm对象,用GetProcAddress方法获取SetConnection方法的地址,调用SetConnection方法,然后ShowForm就可以了。
注意:如果你要使用动态运行包,请将主程序的Options中Packagesr的Build with Runtime Packages选项选上,保留你需要动态载入的包。
 
[:)] 学习学习
不过com好像也是和主程序再一个进程中巴
我对Package方式不了解
请问 Package 方式还有其它的特点嘛?
 
简单的说,使用包就象你Uses一个单元一样,所有的变量都是共享的,用它来做插件程序再好不过啦,运行效果和写在同一程序里一样!
 
[:)]
记住了
 
多人接受答案了。
 
谢谢各位兄弟的捧场!
 
后退
顶部