GlobalLock在使用之前是否一定要加GlobalAlloc?高手赐教!
GlobalLock在使用之前是否一定要加GlobalAlloc??????在线等高手赐教!!
GlobalLock在使用之前是否一定要加GlobalAlloc??????在线等高手赐教!!
在一段程序当中有这样一段代码
lpBI = (LPBITMAPINFOHEADER) ::GlobalLock((HGLOBAL) hDib);
hDib是一幅位图的句柄,它的返回值强制转换成了LPBITMAPINFOHEADER的指针,这样可以吗??? 如果将其强制转换成LPBITMAPFILEHEADER,是否也可以呢????
深表感谢!!!!!!!!在线等!!!!!!!
------解决方案--------------------
因为Windows中句柄指向的内存块并不是固定的,所以句柄不能作为指针使用,而只是一个索引值。锁住句柄,就是使句柄指向的内存块暂时不被内存控制程序移动,此时可以获得一个指向内存的指针,来进行操作。理解为new的功能,基本也差不多。
------解决方案--------------------
传递给GlobalLock的HANDLE已在其他地方(第三方库或系统)GlobalAlloc,你只需按调用规则,用GlobalLock获得可操作的指针就可以了。
在DDE和使用Clipborad的情况下很常见。
GlobalLock在使用之前是否一定要加GlobalAlloc??????在线等高手赐教!!
在一段程序当中有这样一段代码
lpBI = (LPBITMAPINFOHEADER) ::GlobalLock((HGLOBAL) hDib);
hDib是一幅位图的句柄,它的返回值强制转换成了LPBITMAPINFOHEADER的指针,这样可以吗??? 如果将其强制转换成LPBITMAPFILEHEADER,是否也可以呢????
深表感谢!!!!!!!!在线等!!!!!!!
------解决方案--------------------
因为Windows中句柄指向的内存块并不是固定的,所以句柄不能作为指针使用,而只是一个索引值。锁住句柄,就是使句柄指向的内存块暂时不被内存控制程序移动,此时可以获得一个指向内存的指针,来进行操作。理解为new的功能,基本也差不多。
------解决方案--------------------
传递给GlobalLock的HANDLE已在其他地方(第三方库或系统)GlobalAlloc,你只需按调用规则,用GlobalLock获得可操作的指针就可以了。
在DDE和使用Clipborad的情况下很常见。