本帖最后由 cherryli007 于 2011-04-13 11:27:39 编辑

解决方案 »

  1.   

    当你用完m_hDIB_frame1,m_hDIB_frame2后再调用::GlobalUnlock(m_hDIB_frame1);
    ::GlobalFree(m_hDIB_frame1);应该就可以释放了。
      

  2.   

    把HDIB hDIB_g = NULL; 移到函数体外面去。
    在这里面你又要新建句柄又要返回句柄当然不可能释放了。
    在外面
    HDIB hDIB_g = NULL; ……
    m_hDIB_frame1=GetDIBFromCG1(m_hCG1, 0);
    ::GlobalUnlock(hDIB_g);
    ::GlobalFree(hDIB_g);
    Sleep(10);
    m_hDIB_frame2=GetDIBFromCG1(m_hCG1, 0);
    ::GlobalUnlock(hDIB_g);
    ::GlobalFree(hDIB_g);
    ……
      

  3.   

    我开始就是按照你这个思路写的,具体语句也和你写的一样,我把hDIB_g定义为全局变量,然后加上了你写的那样先解除锁定后释放的语句,但是一运行就出错,说
    “0x004040fa”指令引用的“0x00000000”内存。该内存不能为“read”。
    要终止程序,请单击“确定”
    要调试程序,请单击“取消”
      

  4.   

    上网一找“指令引用的“0x00000000”内存。该内存不能为“read”。”的原因实在太多了。
    不好一下子说清楚是怎么回事。
    你可以单步执行一下,看看到第几句时出错了。
    估计是内存分配时的问题可能较大。