服务器程序的编写
服务器程序必须包含对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 <> then
begin
pMem := GlobalLock(hMem) {加锁全局内存块}
if pMem <> nil then
begin
StrPCopy(pMemMemotext) {向全局内存块写入数据}
GlobalUnlock(hMem) {解锁全局内存块}
end
else
MessageDlg(Couldnot Lock memory blockmtWarning[mbOK])
end;
客户程序的编写
客户程序几乎是服务器程序的翻版唯一的区别在于一个是写入数据一个是下载数据
下面是客户从全局内存块下载数据的程序清单
var
hMem: THandle;
pMem: PChar;
begin
hMem := GetGlobalMem; {获得全局内存块的句柄}
if hMem <> then
begin
pMem := GlobalLock(hMem) {加锁全局内存块}
if pMem <> nil then
begin
Memotext := StrPas(pMem) {从全局内存块读取数据}
GlobalUnlock(hMem) {解锁全局内存块}
end
else
MessageDlg(Couldnot Lock memory blockmtWarning[mbOK])
end;
利用DLLs实现窗体重用
实现窗体重用是Delphi DLLs功能中一个引人注目的特色当你创建了一个令自己满意的通用窗体并希望能在不同应用程序中使用特别是希望能在非Delphi 应用程序中使用时把窗体做进一个动态链接库中是最适当的这样即使用其它工具开发的应用程序如C++Visual Basic等也都可以去调用它
包含窗体的DLLs有K左右的部件库(Component Library)开销可以通过把几个窗体编译成一个DLLs来最小化这笔开销DLl中的不同窗体可以共享部件库
[] [] [] []