GlobalLock在使用之前是否一定要加GlobalAlloc??????在线等高手赐教!!

时间:2021-05-11 05:17:46
GlobalLock在使用之前是否一定要加GlobalAlloc??????在线等高手赐教!!
在一段程序当中有这样一段代码
lpBI = (LPBITMAPINFOHEADER) ::GlobalLock((HGLOBAL) hDib);
hDib是一幅位图的句柄,它的返回值强制转换成了LPBITMAPINFOHEADER的指针,这样可以吗??? 如果将其强制转换成LPBITMAPFILEHEADER,是否也可以呢????

深表感谢!!!!!!!!在线等!!!!!!!

8 个解决方案

#1


看看它的参数说明:
hMem 
[in] Handle to the global memory object. 


This handle is returned by either the GlobalAlloc or GlobalReAlloc function. 

#2


不一定,比如你要读取剪切板数据,只需要打开剪切板,然后GlobalLock,就可以使用了。
不过剪切板的写入者仍然需要调用GlobalAlloc。

#3


在我所接到的产品当中  其程序代码中并未见到GlobalAlloc,我也说不清楚是怎么回事,敬请高手前来解疑!!!!!!!!!

#4


看看MSDN中该函数的说明,理解一下该函数的作用。

#5


我看MSDN了,我的理解就是这个函数经常和GlobalAlloc一起使用,GlobalAlloc负责分配内存空间,GlobalLock函数负责锁定一个对象到这块内存空间中,这两个函数合起来用就和New函数的功能差不多,请楼上的Mackz(在相互) 看看我理解的对否????  敬待高手中。。。。。。。

#6


因为Windows中句柄指向的内存块并不是固定的,所以句柄不能作为指针使用,而只是一个索引值。锁住句柄,就是使句柄指向的内存块暂时不被内存控制程序移动,此时可以获得一个指向内存的指针,来进行操作。理解为new的功能,基本也差不多。

#7


谢谢楼上的Mackz(在相互)给与的回答,我还有一个问题,如果这样来看,是不是GlobalLock函数
不可能单独使用,它必须利用类似于GlobalAlloc这样的函数,先分配内存空间,然后才能调用
GlobalLock函数,因为我在程序当中看到GlobalLock函数的时候,在此之前,并没有看到类似于GlobalAlloc这样的函数为其分配内存空间,但是程序编译链接均是正常的的,运行也正常,在下百思不得其解,敬请Mackz(在相互) 给与讲解!!!!  万分感谢!!!!  在线等!!!

#8


传递给GlobalLock的HANDLE已在其他地方(第三方库或系统)GlobalAlloc,你只需按调用规则,用GlobalLock获得可操作的指针就可以了。

在DDE和使用Clipborad的情况下很常见。

#1


看看它的参数说明:
hMem 
[in] Handle to the global memory object. 


This handle is returned by either the GlobalAlloc or GlobalReAlloc function. 

#2


不一定,比如你要读取剪切板数据,只需要打开剪切板,然后GlobalLock,就可以使用了。
不过剪切板的写入者仍然需要调用GlobalAlloc。

#3


在我所接到的产品当中  其程序代码中并未见到GlobalAlloc,我也说不清楚是怎么回事,敬请高手前来解疑!!!!!!!!!

#4


看看MSDN中该函数的说明,理解一下该函数的作用。

#5


我看MSDN了,我的理解就是这个函数经常和GlobalAlloc一起使用,GlobalAlloc负责分配内存空间,GlobalLock函数负责锁定一个对象到这块内存空间中,这两个函数合起来用就和New函数的功能差不多,请楼上的Mackz(在相互) 看看我理解的对否????  敬待高手中。。。。。。。

#6


因为Windows中句柄指向的内存块并不是固定的,所以句柄不能作为指针使用,而只是一个索引值。锁住句柄,就是使句柄指向的内存块暂时不被内存控制程序移动,此时可以获得一个指向内存的指针,来进行操作。理解为new的功能,基本也差不多。

#7


谢谢楼上的Mackz(在相互)给与的回答,我还有一个问题,如果这样来看,是不是GlobalLock函数
不可能单独使用,它必须利用类似于GlobalAlloc这样的函数,先分配内存空间,然后才能调用
GlobalLock函数,因为我在程序当中看到GlobalLock函数的时候,在此之前,并没有看到类似于GlobalAlloc这样的函数为其分配内存空间,但是程序编译链接均是正常的的,运行也正常,在下百思不得其解,敬请Mackz(在相互) 给与讲解!!!!  万分感谢!!!!  在线等!!!

#8


传递给GlobalLock的HANDLE已在其他地方(第三方库或系统)GlobalAlloc,你只需按调用规则,用GlobalLock获得可操作的指针就可以了。

在DDE和使用Clipborad的情况下很常见。