由于开发的系统较大,又几个人共同完成,所以各个业务模块以dll完成,但访问的只有一个数据库。我在主exe中已经配置好了adoconnection的连接。那么最好

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

shangshang

Unregistered / Unconfirmed
GUEST, unregistred user!
由于开发的系统较大,又几个人共同完成,所以各个业务模块以dll完成,但访问的只有一个数据库。我在主exe中已经配置好了adoconnection的连接。那么最好以什么样的形式给dll参数,让dll可以共享这个连接呢?(200分)<br />1,如果传递一个连接字符串,则在dll中要新创建一个连接。费时费资源。
2,直接穿一个adoconnection引用过去,又想让这个dll更兼容写,比如用vc或bcb调用。
3,用ado原生对象可以作到吗? 比如传个连接句炳什么的。(仅是我想象,我不会的。)
希望诸位能提示一二。
 
SendMessage发送消息不知道可不可以?
我的程序就是这样做的
 
我的dll中有应该有若干个dataset组件,需要设置他们的connection属性.
我的意思是,最好以什么为参数, 可以让他们用上exe中的已经建立好的Adoconnection.
 
用LongInt类型的参数
DLL export出
procedure InitDLLData(Conn: LongInt);
传入:
InitDllData(LongInt(AdoConnection1));
DLL中使用
AdoQuery.Connection := TAdoConnection(Conn);
因为都是32位整数指针,用个强制类型转换就行了。
不过有个Bug,就是用RTTI时总是不成功,跟在同一个程序中不一样。
 
你要是说在Delphi
间调用我倒可以告诉你。
你要是说能在别的语言的DLL
里调用我就不知道了
 
一般情况下统统都是DELPHI,
如果可以实现多种开发工具共同协作, 我求之不得。
原生connection连接后有个连接句柄,有没有人试着传那个东西,行不行?
最好不要在DLL中再建连接了,我目的要共享EXE的与数据库的会话。
 
各位想学习的dfw,帮着up一下。
 
你必须作到以下:
1.主程序要带包编译
2.DLL带包编译
这样就有了可共存的地址空间。可以在EXE和DLL间传递任何的
VCL对象。
 
最好整个数据模块能够在DLL中使用,有这样的技术我也想知道
 
你可以不使用dll,如果你只想在delphi中使用,可以用包的技术。bpl它是delphi自己的dll
数据可以共享。很方便的,你可以查查以前的帖子很多的!
 
我想在dll下调用。
最好能满足第二个要求,可以吗?
 
这里有个例子不知行不行
http://delphi.mychangshu.com/dispdoc.asp?id=1120
 
我打不开这个网页啊,有别的方法吗?
 
想要普通DLL里面共享ADOConnection COM Object是不太可能的,不知道写一个DLL
的COM Server可不可以,你去试试吧
 
我觉得没有多大必要那样做,因为不同的开发工具连接数据库的方法并不一样。不知以下
两种方法可好:
1。新增、修改、删除时让DLL返回相应的SQL语句就行,让主程序执行相应SQL程序。
2。让各自的DLL维护自己的连接。
 
//aaa.dll,编译前pas文件
function fbSelectQu( lsMachineName : PChar
; lsUser : PChar
; lsPasswd : PChar
; lsQu : PChar) : Boolean; stdcall;
var
lsSQL : String;
lqSQL : TADOQuery;
begin
lsSQL := ' SELECT * FROM T00 WHERE l = ''' + lsQu + '''';
lqSQL := TADOQuery.Create(nil);
lqSQL.Close;
lqSQL.ConnectionString := 'Provider=SQLOLEDB.1;Password=' + lsPasswd + ';Persist Security Info=True;User ID=' + lsUser + ';Initial Catalog=bellmax;Data Source=' + lsMachineName;
lqSQL.SQL.Clear;
lqSQL.SQL.Add(lsSQL);
try
lqSQL.Open;
except
end;
if lqSQL.IsEmpty then
Result := False
else
Result := True;
lqSQL.Free;
end;
exports
fbSelectQu;
//别的程序调用
Function fbSelectQu( lsMachineName : PChar
; lsUser : PChar
; lsPasswd : PChar
; lsQu : PChar) : Boolean; stdcall external 'aaa.DLL';

 
听我们的一个朋友用BDE可以实现在Delphi中的调用。
好象ADO传进去后运行效果不是很好的!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部