Delphi程序模块化设计
时间:2011-11-16
来源:互联网
另外网上现在有关DLL的资料五花八门都有,并没有系统的资料可看,BPL更少,请朋友们帮忙推荐一些有关DLL或BPL的资料吧
作者: changfenglee 发布时间: 2011-11-16
作者: foxyy8888 发布时间: 2011-11-16
作者: foxyy8888 发布时间: 2011-11-16
作者: tgbd 发布时间: 2011-11-16
作者: kaikai_kk 发布时间: 2011-11-16
作者: case5166 发布时间: 2011-11-16
作者: case5166 发布时间: 2011-11-16
作者: changfenglee 发布时间: 2011-11-16
求教 !
作者: case5166 发布时间: 2011-11-16
BPL似乎好用些吧,,至少可以共用数据库连接,而DLL似乎不也得引用BPL来实现共用数据库连接吧。
function test(conn :TAdoConnection;const id:integer):PChar; stdcall; export;
var
AdoQuery :TAdoQuery;
begin
Result :=nil;
AdoQuery :=TAdoQuery.Create;
Try
AdoQuery.Connection :=Conn;
AdoQuery.SQL.Text :=Format('SELECT NAME FROM EMPLOYEE WHERE ID=%d;',[id]);
AdoQuery.open;
if AdoQuery.RecordCount=1 then
Result :=PChar(AdoQuery.Fields[0].AsString);
finally
AdoQuery.Free;
end;
end;
作者: foxyy8888 发布时间: 2011-11-16
Conn是一个TAdoConnection的一个实例,其实就是个Pointer
如果不喜欢TAdoConnection,那么用Pointer作为Conn的类型都可以,然后强制类型转换。
在主程序中建立的Temp Table在DLL中都可以看到,是不是共用Connection?
作者: foxyy8888 发布时间: 2011-11-16
作者: wei_wu49036233 发布时间: 2011-11-16
即使DLL里面的窗口, 嵌入主程序, 就是Panel也照样把Parent指向之后就能够贴上去的了...
作者: dfasri 发布时间: 2011-11-16
回调函数定义如下,主程序,DLL都要定义
Type
TDisplayCallback=procedure(const s:PChar);
DLL写法
function test(Conn :Pointer;const ID:Integer;DisplayCallback :TDisplayCallback):integer; stdcall; export;
var
AdoQuery:TAdoQuery;
c :integer;
begin
AdoQuery :=TAdoQuery.Create(nil);
AdoQuery.Connection :=TAdoConnection(Conn);
result :=nil;
Try
AdoQuery.Connection :=AdoQuery;
AdoQuery.SQL.text :='SELECT * FROM EMPLOYEE;';
c :=0;
While AdoQuery.Eof do
begin
if AdoQuery.FieldByName('ID').asinteger=ID then
begin
Result :=PChar(AdoQuery.FieldByName('NAME').asstring);
break;
end;
AdoQuery.Next;
Inc(C);
DisplayCallback(PChar(Format('%d%%',[Trunc((c/AdoQuery.recordcount)*100)])));
end;
finally
AdoQuery.free;
end;
end;
main写法
procedure FDisplayCallback(const s:PChar);
begin
Form1.Staturbar.panels[0].text :=s;
end;
调用
test(Pointer(AdoConnection1),100,@FDisplayCallback);
作者: foxyy8888 发布时间: 2011-11-16
conn :TAdoConnection
Conn是一个TAdoConnection的一个实例,其实就是个Pointer
如果不喜欢TAdoConnection,那么用Pointer作为Conn的类型都可以,然后强制类型转换。
在主程序中建立的Temp Table在DLL中都可以看到,是不是共用Connection?
我是说比如建立一个PUBLICDATA的DLL模块,让其它DLL模块调用也能调用这个PUBLICDATA的DLL中的CONN?
而不是在主程序上的数据连接,
不知道二者有无区别&&&
因为我看到很多程序是EXE+BPL+DLL结合来做的,
而BPL一般用作共享数据
作者: case5166 发布时间: 2011-11-16
作者: funxu 发布时间: 2011-11-16
作者: funxu 发布时间: 2011-11-16
引用 10 楼 foxyy8888 的回复:
conn :TAdoConnection
Conn是一个TAdoConnection的一个实例,其实就是个Pointer
如果不喜欢TAdoConnection,那么用Pointer作为Conn的类型都可以,然后强制类型转换。
在主程序中建立的Temp Table在DLL中都可以看到,是不是共用Connection?
我是说比如建立一个P……
Delphi(Pascal) code
//试试,改改。 var MainConnection :TAdoConnection; 一定要写到implementation上面 function GetConn(。。。;var ConnState:Boolean):Pointer; stdcall; export; begin MainConnection :=TAdoConnection.Create(nil); Result :=nil; Try MainConnection.Connectstring(?记不清了) :='....'; MainConnection.Connected :=True; Result :=Pointer(MainConnection); ConnState :=True; Except ConnState :=False; end; end; procedure DisConnect; stdcall; export; begin ConnState.Free; end;
作者: foxyy8888 发布时间: 2011-11-16
begin
MainConnection.Free;
end;
作者: foxyy8888 发布时间: 2011-11-16

作者: case5166 发布时间: 2011-11-16
像TAdoConnection等返回类型也是可以的,其他程序用Pointer可以得到地址,但是其他语言没有TAdoConnection类型与之对应而已,如果无聊也可以编写对应的结构,不过难度较大。
作者: foxyy8888 发布时间: 2011-11-16
function AdoQry(Sql_Str:string):TADOQuery;stdcall;
var
Qry:TAdoQuery;
begin
Qry:=TADOQuery.Create(nil);
Qry.Connection:=Con;
Qry.SQL.Clear;
Qry.SQL.Add(Sql_Str);
Qry.Open;
Result:=Qry;
end;
然后主程序如果要引用这一段函数只要赋值给变量就可以了
AdoQry('Select * from 表名');
作者: changfenglee 发布时间: 2011-11-16
该回复于2011-11-16 13:13:31被管理员删除
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
|
#23楼 得分:0回复于:2011-11-16 12:22:29
|
作者: case5166 发布时间: 2011-11-16
作者: changfenglee 发布时间: 2011-11-16
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28