DELPHI基础教程:动态链接库编程(一)[4]

 我来答
世纪网络17
2022-10-15 · TA获得超过5944个赞
知道小有建树答主
回答量:2426
采纳率:100%
帮助的人:141万
展开全部

  Order := TInstr(PFunc)(text Key)

  TInStr是一个定义好了的函数类型

  type

  TInStr = function(Source: PChar;Check: Char) Integer;

   利用DLLs实现数据传输

   DLLs中的全局内存

  Windows规定 DLLs并不拥有它打开的任何文件或它分配的任何全局内存块 这些对象由直接或间接调用DLLs的应用程序拥有 这样 当应用程序中止时 它拥有的打开的文件自动关闭 它拥有的全局内存块自动释放 这就意味着保存在DLLs全局变量中的文件和全局内存块变量在DLLs没有被通知的情况下就变为非法 这将给其它使用该DLLs的应用程序造成困难

  为了避免出现这种情况 文件和全局内存块句柄不应作为DLLs的全局变量 而是作为DLLs中过程或函数的参数传递给DLLs使用 调用DLLs的应用程序应该负责对它们的维护

  但在特定情况下 DLLs也可以拥有自己的全局内存块 这些内存块必须用gmem_DDEShare属性进行分配 这样的内存块直到被DLLs显示释放或DLLs退出时都保持有效

  由DLLs管理的全局内存块是应用程序间进行数据传输的又一途径 下面我们将专门讨论这一问题

   利用DLLs实现应用程序间的数据传输

  利用DLLs实现应用程序间的数据传输的步骤为

   编写一个DLLs程序 其中拥有一个用gmem_DDEShare属性分配的全局内存块

   服务器程序调用DLLs 向全局内存块写入数据

   客户程序调用DLLs 从全局内存块读取数据

   用于实现数据传输的DLLs的编写

  用于实现数据传输的DLLs与一般DLLs的编写基本相同 其中特别的地方是

   定义一个全局变量句柄

  var

  hMem: THandle;

   定义一个过程 返回该全局变量的句柄 该过程要包含在exports子句中 如

  function GetGlobalMem: THandle; export;

  begin

  Result := hMem;

  end;

   在初始化代码中分配全局内存块

  程序清单如下

  begin

  hMem := GlobalAlloc(gmem_MOVEABLE and gmem_DDEShare num)

  if hMem = then

  MessageDlg( Could not allocate memory mtWarning [mbOK] )

  end

  num是一个预定义的常数

  Windows API函数GlobalAlloc用于从全局内存堆中分配一块内存 并返回该内存块的句柄 该函数包括两个参数 第一个参数用于设置内存块的分配标志 可以使用的分配标志如下表所示

  表 全局内存块的分配标志

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  标 志 意 义

  

  gmem_DDEShare 分配可由应用程序共享的内存

  gmem_Discardable 分配可抛弃的内存(只与gmem_Moveable连用)

  gmem_Fixed 分配固定内存

  gmem_Moveable 分配可移动的内存

  gmem_Nopact 该全局堆中的内存不能被压缩或抛弃

  gmem_Nodiscard 该全局堆中的内存不能被抛弃

  gmem_NOT_Banked 分配不能被分段的内存

  gmem_Notify 通知功能 当该内存被抛弃时调用GlobalNotify函数

  gmem_Zeroinit 将所分配内存块的内容初始化为零

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  有两个预定义的常用组合是

  GHND = gmem_Moveable and gmem_Zeroinit

  GPTK = gmem_Fixed and gmem_Zeroinit

  第二个参数用于设置欲分配的字节数 分配的字节数必须是 的倍数 因而实际分配的字节数可能比所设置的要大

  由于用gmem_DDEShare分配的内存在分配内存的模块终止时自动抛弃 因而不必调用GlobalFree显式释放内存

   返回目录 DELPHI基础教程

       编辑推荐

       Java程序设计培训视频教程

       J EE高级框架实战培训视频教程

  Visual C++音频/视频技术开发与实战

  Oracle索引技术

  ORACLE G数据库开发优化指南

  Java程序性能优化 让你的Java程序更快 更稳定

  C嵌入式编程设计模式

  Android游戏开发实践指南

lishixinzhi/Article/program/Delphi/201311/25210

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式