Delphi 动态链接库编程(三)
2008-02-23 07:15:56来源:互联网 阅读 ()
10.3.2.2 服务器程序的编写
服务器程序必须包含对DLL的调用代码,如:
function GetGlobalMem: THandle; far; external 'c:\dlls\glbmem';
通过调用该函数,服务器可以获得全局内存块的句柄。
在写入数据前,服务器必须锁定全局内存,以避免在写入过程中
Windows移动该内存块的位置。函数
GlobalLock锁定全局内存并返回指向该内存块的指针:pMem := GlobalLock(hMem);
对
pMem的任何修改都会反映到全局内存块中。对内存块进行操作后,调用
GlobalUnLock进行解锁。内存块操作之后尽早解锁,有利于Windows充分利用内存资源。服务器写入数据的实现代码如下。
var
hMem: THandle;
pMem: PChar;
begin
hMem := GetGlobalMem; {获得全局内存块的句柄}
if hMem <> 0 then
begin
pMem := GlobalLock(hMem); {加锁全局内存块}
if pMem <> nil then
begin
StrPCopy(pMem,Memo1.text); {向全局内存块写入数据}
GlobalUnlock(hMem); {解锁全局内存块}
end
else
MessageDlg('Couldnot Lock memory block',mtWarning,[mbOK],0);
end;
10.3.2.3 客户程序的编写
客户程序几乎是服务器程序的翻版。唯一的区别在于一个是写入数据,一个是下载数据。
下面是客户从全局内存块下载数据的程序清单。
var
hMem: THandle;
pMem: PChar;
begin
hMem := GetGlobalMem; {获得全局内存块的句柄}
if hMem <> 0 then
begin
pMem := GlobalLock(hMem); {加锁全局内存块}
if pMem <> nil then
begin
Memo1.text := StrPas(pMem); {从全局内存块读取数据}
GlobalUnlock(hMem); {解锁全局内存块}
end
else
MessageDlg('Couldnot Lock memory block',mtWarning,[mbOK],0);
end;
10.4 利用DLLs实现窗体重用
实现窗体重用是
Delphi DLLs功能中一个引人注目的特色。当你创建了一个令自己满意的通用窗体并希望能在不同应用程序中使用,特别是希望能在非Delphi 应用程序中使用时,把窗体做进一个动态链接库中是最适当的。这样即使用其它工具开发的应用程序,如C 、Visual Basic等,也都可以去调用它。包含窗体的
DLLs有100K左右的部件库(Component Library)开销。可以通过把几个窗体编译成一个DLLs来最小化这笔开销。DLl中的不同窗体可以共享部件库。10.4.1 利用DLLs实现窗体重用的一般步骤
利用DLLs实现窗体重用的步骤是:
1.在集成开发环境(IDE)中,按自己的需要设计一个窗体;
2.编写一个用于输出的函数或过程。在该函数或过程中,设计的窗体被实例化;
3.重复步骤1、2,直到完成所有重用窗体的设计;
4.打开工程文件,进行修改,以适应生成 .dll文件的需要:
(1).把保留字program设为library;
(2).从uses子句中去掉Forms单元;
(3).移去begin,end之间的所有代码;
(4).在uses子句下,begin…end块之前,添加保留字exprots。exports 后是输出函数名或过程名。
5.编译生成DLLs文件;
6.在其它应用程序中调用重用窗体。
重用窗体的调用同一般DLLs函数或过程的调用完全一致,不再赘述。读者可参看下面的例子。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Delphi图形图像编程(一)
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash