Delphi GlobalAlloc、GlobalLock、GlobalUnlock、GlobalFree 函数

摘要:
GlobalFree函数释放内存块。此句柄是通过GlobalAlloc或GlobalReAlloc获得的返回值。如果调用成功,则返回指向对象第一个字节的指针。如果调用失败,则返回NULL。您可以使用GetLastError获取错误信息。注意:调用GlobalLock锁定内存区域后,必须调用GlobalUnlock才能解锁。

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

免责声明:文章转载自《Delphi GlobalAlloc、GlobalLock、GlobalUnlock、GlobalFree 函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇HTTP 错误 405.0vue 后台 权限管理 三级渲染列表下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

delphi idhttp 实战用法(TIdhttpEx)

以delphi XE8 自带indy(10.5.8.0)组件为例,分享实战中遇到的问题及解决方法。 TIdHttpEx 用法实例01[多线程获取网页](包含完整源码) 实例02(如何Post参数,如何保存与提取Cookie)待写 TIdHttpEx 已实现了对GZIP的解压,对UTF-8编码解码等 本文包含以下几个单元 uIdhttp.pas (TIdHt...

Delphi与Windows 7下的用户账户控制(UAC)机制(加小盾牌),注册表没反应

WIN7, Vista提供的UAC机制,它的主要目的是防止对于操作系统本身的恶意修改。对于Delphi程序的影响,UAC主要在于以下几点:1、由于UAC机制,Delphi对于系统的操作可能无声的失败,而同样的程序,在2000/X下面可能运行正常。譬如注册表的改动。。。2、为了避免这样的情况,Delphi程序必须支持Vista UAC标注,也就是说,在UAC...

DELPHI事务

--测试环境createtable table1(id intprimarykey)insert table1 select1union  all    select2--查看表select*from table1--操作A(执行错误后,事务没有回滚)begintrandeleteFrom table1 where id=1Insertinto A(Fie...

delphi 操作xml示例(DelphiBBS)

自:http://www.delphibbs.com/keylife/iblog_show.asp?xid=20713 ================================================================ 2005-9-23 21:05:34xml基础操作实例,因为刚开始学,如果有不对的地方,请批评指正,代码...

Delphi声明Record变量后直接初始化

 TARec = record    A1: string;    A2: string;  end;   TBRec = record    A1: string;    A2: string;    ARec: TARec;  end;   PAppWindow = ^TAppWindow;  TAppWindow = Record    Width,...

Delphi自写组件:可设置颜色的按钮(改成BS_OWNERDRAW风格,然后CN_DRAWITEM)

unit ColorButton; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, StdCtrls; type TColorButton = class(TButton) private //添加Color属性,默...