• 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,则表示未加锁或已经解锁。

  • 相关阅读:
    417 Pacific Atlantic Water Flow 太平洋大西洋水流
    416 Partition Equal Subset Sum 分割相同子集和
    415 Add Strings 字符串相加
    414 Third Maximum Number 第三大的数
    413 Arithmetic Slices 等差数列划分
    412 Fizz Buzz
    410 Split Array Largest Sum 分割数组的最大值
    409 Longest Palindrome 最长回文串
    day22 collection 模块 (顺便对比queue也学习了一下队列)
    day21 计算器作业
  • 原文地址:https://www.cnblogs.com/guorongtao/p/11629545.html
Copyright © 2020-2023  润新知