hLogPal = GlobalAlloc(GHND, sizeof(LOGPALETTE) + 
                sizeof(PALETTEENTRY) * wNumColors); 
        if (!hLogPal)             return NULL; 
        lpPal = (LPLOGPALETTE)GlobalLock(hLogPal);     hDIB = GlobalAlloc(GMEM_MOVEABLE, (DWORD)(sizeof(BITMAPINFOHEADER) + 
            256 * sizeof(RGBQUAD))); 
    if (!hDIB)         return NULL; 
    lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB); 
这是一本书上读入位图的两段程序。
我想知道它为什么要GlobalAlloc和GlobalLock,和第一个为什么用GHND,而第二个用GMEM_MOVEABLE。
这个程序是个MDI程序。

解决方案 »

  1.   

    GHND = GMEM_MOVEABLE + GMEM_ZEROINIT
    即内存预先清零
    其它没有什么不同
    GMEM_MOVEABLE分配的内存可能不在物理内存中
    所以用 GlobalLock 分页交换到物理内存
      

  2.   

    因为图象数据都比较大,所以采用GlobalAlloc从堆中分配出一段内存.
    GlobalLock通过内存句柄获得内存的指针.
    GHND和GMEM_MOVEABLE,你可以去MSDN看看,第二个用GHND也是可以的.
    我用过.
      

  3.   

    同意 yzhz(众里寻她千百度)的说法
      

  4.   

    那它和malloc有什么不一样,为什么要这么费劲呢。
    我只有C的功底。