知识大全 动态链接库编程(一)[4]

Posted

篇首语:学问是心灵的慧眼。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 动态链接库编程(一)[4]相关的知识,希望对你有一定的参考价值。

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

  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游戏开发实践指南

cha138/Article/program/Delphi/201311/25210

相关参考

知识大全 动态链接库编程(一)[3]

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

知识大全 动态链接库编程(一)[2]

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

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

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

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

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

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

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

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

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

知识大全 在VC中链接动态链接库的方法简要说明

在VC中链接动态链接库的方法简要说明  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!方法一windo

知识大全 Delphi中动态链接库两种调用方式的比较

Delphi中动态链接库两种调用方式的比较  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一动态链接

知识大全 LINUX系统中动态链接库的创建与使用

LINUX系统中动态链接库的创建与使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  大家都知道

知识大全 Delphi 中动态链接库(dll)的建立和使用[2]

Delphi中动态链接库(dll)的建立和使用[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!