知识大全 动态链接库编程(二)[1]

Posted

篇首语:读过一本好书,像交了一个益友本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 动态链接库编程(二)[1]相关的知识,希望对你有一定的参考价值。

DELPHI基础教程:动态链接库编程(二)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   服务器程序的编写

  服务器程序必须包含对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(pMem Memo text) 向全局内存块写入数据

  GlobalUnlock(hMem) 解锁全局内存块

  end

  else

  MessageDlg( Couldnot Lock memory block mtWarning [mbOK] )

  end;

   客户程序的编写

  客户程序几乎是服务器程序的翻版 唯一的区别在于一个是写入数据 一个是下载数据

  下面是客户从全局内存块下载数据的程序清单

  var

  hMem: THandle;

  pMem: PChar;

  begin

  hMem := GetGlobalMem; 获得全局内存块的句柄

  if hMem <> then

  begin

  pMem := GlobalLock(hMem) 加锁全局内存块

  if pMem <> nil then

  begin

  Memo text := StrPas(pMem) 从全局内存块读取数据

  GlobalUnlock(hMem) 解锁全局内存块

  end

  else

  MessageDlg( Couldnot Lock memory block mtWarning [mbOK] )

  end;

   利用DLLs实现窗体重用

  实现窗体重用是Delphi DLLs功能中一个引人注目的特色 当你创建了一个令自己满意的通用窗体并希望能在不同应用程序中使用 特别是希望能在非Delphi 应用程序中使用时 把窗体做进一个动态链接库中是最适当的 这样即使用其它工具开发的应用程序 如C++ Visual Basic等 也都可以去调用它

  包含窗体的DLLs有 K左右的部件库(Component Library)开销 可以通过把几个窗体编译成一个DLLs来最小化这笔开销 DLl中的不同窗体可以共享部件库

cha138/Article/program/Delphi/201311/25203

相关参考