在一段程序当中有这样一段代码
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.
hMem
[in] Handle to the global memory object.
This handle is returned by either the GlobalAlloc or GlobalReAlloc function.
#2
不一定,比如你要读取剪切板数据,只需要打开剪切板,然后GlobalLock,就可以使用了。
不过剪切板的写入者仍然需要调用GlobalAlloc。
不过剪切板的写入者仍然需要调用GlobalAlloc。
#3
在我所接到的产品当中 其程序代码中并未见到GlobalAlloc,我也说不清楚是怎么回事,敬请高手前来解疑!!!!!!!!!
#4
看看MSDN中该函数的说明,理解一下该函数的作用。
#5
我看MSDN了,我的理解就是这个函数经常和GlobalAlloc一起使用,GlobalAlloc负责分配内存空间,GlobalLock函数负责锁定一个对象到这块内存空间中,这两个函数合起来用就和New函数的功能差不多,请楼上的Mackz(在相互) 看看我理解的对否???? 敬待高手中。。。。。。。
#6
因为Windows中句柄指向的内存块并不是固定的,所以句柄不能作为指针使用,而只是一个索引值。锁住句柄,就是使句柄指向的内存块暂时不被内存控制程序移动,此时可以获得一个指向内存的指针,来进行操作。理解为new的功能,基本也差不多。
#7
谢谢楼上的Mackz(在相互)给与的回答,我还有一个问题,如果这样来看,是不是GlobalLock函数
不可能单独使用,它必须利用类似于GlobalAlloc这样的函数,先分配内存空间,然后才能调用
GlobalLock函数,因为我在程序当中看到GlobalLock函数的时候,在此之前,并没有看到类似于GlobalAlloc这样的函数为其分配内存空间,但是程序编译链接均是正常的的,运行也正常,在下百思不得其解,敬请Mackz(在相互) 给与讲解!!!! 万分感谢!!!! 在线等!!!
不可能单独使用,它必须利用类似于GlobalAlloc这样的函数,先分配内存空间,然后才能调用
GlobalLock函数,因为我在程序当中看到GlobalLock函数的时候,在此之前,并没有看到类似于GlobalAlloc这样的函数为其分配内存空间,但是程序编译链接均是正常的的,运行也正常,在下百思不得其解,敬请Mackz(在相互) 给与讲解!!!! 万分感谢!!!! 在线等!!!
#8
传递给GlobalLock的HANDLE已在其他地方(第三方库或系统)GlobalAlloc,你只需按调用规则,用GlobalLock获得可操作的指针就可以了。
在DDE和使用Clipborad的情况下很常见。
在DDE和使用Clipborad的情况下很常见。
#1
看看它的参数说明:
hMem
[in] Handle to the global memory object.
This handle is returned by either the GlobalAlloc or GlobalReAlloc function.
hMem
[in] Handle to the global memory object.
This handle is returned by either the GlobalAlloc or GlobalReAlloc function.
#2
不一定,比如你要读取剪切板数据,只需要打开剪切板,然后GlobalLock,就可以使用了。
不过剪切板的写入者仍然需要调用GlobalAlloc。
不过剪切板的写入者仍然需要调用GlobalAlloc。
#3
在我所接到的产品当中 其程序代码中并未见到GlobalAlloc,我也说不清楚是怎么回事,敬请高手前来解疑!!!!!!!!!
#4
看看MSDN中该函数的说明,理解一下该函数的作用。
#5
我看MSDN了,我的理解就是这个函数经常和GlobalAlloc一起使用,GlobalAlloc负责分配内存空间,GlobalLock函数负责锁定一个对象到这块内存空间中,这两个函数合起来用就和New函数的功能差不多,请楼上的Mackz(在相互) 看看我理解的对否???? 敬待高手中。。。。。。。
#6
因为Windows中句柄指向的内存块并不是固定的,所以句柄不能作为指针使用,而只是一个索引值。锁住句柄,就是使句柄指向的内存块暂时不被内存控制程序移动,此时可以获得一个指向内存的指针,来进行操作。理解为new的功能,基本也差不多。
#7
谢谢楼上的Mackz(在相互)给与的回答,我还有一个问题,如果这样来看,是不是GlobalLock函数
不可能单独使用,它必须利用类似于GlobalAlloc这样的函数,先分配内存空间,然后才能调用
GlobalLock函数,因为我在程序当中看到GlobalLock函数的时候,在此之前,并没有看到类似于GlobalAlloc这样的函数为其分配内存空间,但是程序编译链接均是正常的的,运行也正常,在下百思不得其解,敬请Mackz(在相互) 给与讲解!!!! 万分感谢!!!! 在线等!!!
不可能单独使用,它必须利用类似于GlobalAlloc这样的函数,先分配内存空间,然后才能调用
GlobalLock函数,因为我在程序当中看到GlobalLock函数的时候,在此之前,并没有看到类似于GlobalAlloc这样的函数为其分配内存空间,但是程序编译链接均是正常的的,运行也正常,在下百思不得其解,敬请Mackz(在相互) 给与讲解!!!! 万分感谢!!!! 在线等!!!
#8
传递给GlobalLock的HANDLE已在其他地方(第三方库或系统)GlobalAlloc,你只需按调用规则,用GlobalLock获得可操作的指针就可以了。
在DDE和使用Clipborad的情况下很常见。
在DDE和使用Clipborad的情况下很常见。