• Delphi GlobalAlloc、GlobalLock、GlobalUnlock、GlobalFree 函数


    GlobalAlloc 函数 分配一块内存,该函数会返回分配的内存句柄。 
    GlobalLock 函数 锁定内存块,该函数接受一个内存句柄作为参数,然后返回一个指向被锁定的内存块的指针。 您可以用该指针来读写内存。 
    GlobalUnlock 函数 解锁先前被锁定的内存,该函数使得指向内存块的指针无效。 
    GlobalFree 函数 释放内存块。您必须传给该函数一个内存句柄。

    GlobalAlloc 函数原型:
    GlobalAlloc(UINT uFLAG,DWORD dwBytes);
    说明 
    分配一个全局内存块 
    返回值 
    Long,返回全局内存句柄。零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    uFlags Long,对分配的内存类型进行定义的常数标志,如下所示: 
    GMEM_FIXED 分配一个固定内存块 
    GMEM_MOVEABLE 分配一个可移动内存块 
    GMEM_DISCARDABLE 分配一个可丢弃内存块 
    GMEM_NOCOMPACT 堆在这个函数调用期间不进行累积 
    GMEM_NODISCARD 函数调用期间不丢弃任何内存块 
    GMEM_ZEROINIT 新分配的内存块全部初始化成零 
    dwBytes Long,要分配的字符数 
    注解 
    如指定了 GMEM_FIXED,那么返回值就是要使用的实际内存地址即指针(GlobalLock 会返回同样的值)——所以在使用固定内存块的时候不需要执行一个 GlobalLock/GlobalUnlock 操作
    由于 Win32 采用了高级的内存管理方案,所以使用可移动的内存块并没有什么好处
    用这个函数分配的内存块允许在8位边界以内


    GlobalLock 函数功能描述:锁定一个全局的内存对象,返回指向该对象的第一个字节的指针
    函数原型:
    LPVOID GlobalLock( HGLOBAL hMem )
    参数:
    hMem:全局内存对象的句柄。这个句柄是通过GlobalAlloc或GlobalReAlloc来得到的
    返回值:
    调用成功,返回指向该对象的第一个字节的指针
    调用失败,返回NULL,可以用GetLastError来获得出错信息
    注意:
    调用过GlobalLock锁定一块内存区后,一定要调用GlobalUnlock来解锁。


    GlobalUnlock 函数功能描述:解除被锁定的全局内存对象
    函数原型:BOOL GlobalUnlock( HGLOBAL hMem );
    参数:hMem:全局内存对象的句柄
    返回值:
    非零值,指定的内存对象仍处于被锁定状态
    0,函数执行出错,可以用GetLastError来获得出错信息,如果返回NO_ERROR,则表示内存对象已经解锁了
    注意: 这个函数实际上是将内存对象的锁定计数器减一,如果计数器不为0,则表示执行过多个GlobalLock函数来对这个内存对象加锁,需要对应数目的GlobalUnlock函数来解锁。
    如果通过GetLastError函数返回错误码为ERROR_NOT_LOCKED,则表示未加锁或已经解锁。

  • 相关阅读:
    lcn 分布式事务协调者集群原理
    springboot 监控 Actuator
    springboot 配置文件说明
    docker 安装jenkins
    docker 搭建maven 私服
    docker 安装 gitlab
    docker 安装软件
    docker 部署 java 项目
    mybatis 中between and用法
    vue-router history 模式 iis 配置
  • 原文地址:https://www.cnblogs.com/guorongtao/p/11629545.html
Copyright © 2020-2023  润新知