如何返回dll中的值到调用这个dll的窗体中?

youlostme 2010-11-18 11:25:31
软件中的很多窗体(30多个)都要读取数据库的配置信息文件,然后进行数据库操作。所以,我想能否写在一个dll文件里面,从窗体引用这个dll就行了,而不用再每个窗体的代码里面都添加同样的读取文件代码。

问题是:在dll里面进行数据库配置文件读取操作之后,如何将得到的配置信息(server_ip,sa_name,sa_pass,data_name),返回到调用这个dll文件的窗体上呀?

我的dll的文件代码如下,改如何修改这个dll的代码达到我想要的效果呢?


library databaseconn;

uses
SysUtils,
Classes;

type
filehead = packed record
serverip:string[100];//sql ip
saname:string[100];//sa
sapass:string[100];//sa password
dataname:string[100];//数据库名
end;

var dataconn:file of filehead;


procedure readdatabaseconn;stdcall;
var myhead:filehead;
server_ip,sa_name,sa_pass,data_name:string;
begin
//////////读取登录信息文件////////////////////

assignfile(dataconn, 'dataconn.dat');
reset(dataconn);
Read(dataconn,myhead);
server_ip:=myhead.serverip;
sa_name:=myhead.saname;
sa_pass:=myhead.sapass;
data_name:=myhead.dataname;
////////////////////////////////
end;
...全文
73 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaohuateng 2010-11-22
  • 打赏
  • 举报
回复
主窗体在打开DLL的函数里传递一个变量
在DLL里修改 ^变量
DLL窗体关闭后,变量值就会改变。
我以前用DLL封装过一个系统登陆窗,就是这样获取数据库连接字符串的
gobiz 2010-11-18
  • 打赏
  • 举报
回复
导出函数。

DLL:

procedure ReadDatabaseConn(AHost, AUser, APass, ADbName: PAnsiChar); StdCall;
begin
//...
StrPCopy(AHost, myhead.serverip);
StrPCopy(AUser, myhead.saname);
StrPCopy(APass, myhead.sapass);
StrPCopy(ADbName, myhead.dataname);
end;


FORM:

var
FHost, FUser, FPass, FDbName: PAnsiChar;
begin
AllocMem(FHost, 100);
AllocMem(FUser, 100);
AllocMem(FPass, 100);
AllocMem(FDbName, 100);
try
ReadDatabaseConn(FHost, FUser, FPass, FDbName);
//do something
finally
FreeMem(FHost);
FreeMem(FUser);
FreeMem(FPass);
FreeMem(FDbName);
end;
end;
youlostme 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gobiz 的回复:]
内存映射文件+消息传递

主控窗体写入内存映射文件,发送消息至Dll,Dll接收到消息后开始读取内存映射文件,反之亦然。
[/Quote]

还有简单的办法吗?
youlostme 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gobiz 的回复:]
如果不明白内存映射文件如何处理,建议先Google一下。

另外:结帖率有点低啦!
[/Quote]

哈哈

因为有的帖子,还没得到想要的答案,或者还没测试成功,正在弄啦。

我的帖子都是这几天才发的。
gobiz 2010-11-18
  • 打赏
  • 举报
回复
如果不明白内存映射文件如何处理,建议先Google一下。

另外:结帖率有点低啦!
gobiz 2010-11-18
  • 打赏
  • 举报
回复
内存映射文件+消息传递

主控窗体写入内存映射文件,发送消息至Dll,Dll接收到消息后开始读取内存映射文件,反之亦然。
youlostme 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zkroy36 的回复:]
我晕,你的是30几个窗体,又不是30几个dll,直接用一个单元就可以了,如果还想只读一次,用个单例模式就可以了
[/Quote]

单元里面如何返回我想要的值呢?
zkroy36 2010-11-18
  • 打赏
  • 举报
回复
我晕,你的是30几个窗体,又不是30几个dll,直接用一个单元就可以了,如果还想只读一次,用个单例模式就可以了

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧