例如:
HANDLE hDib = GlobalAlloc(GMEM_FIXED,dwLen);
LPBITMAPINFOHEDER a;
a=(LPBITMAPINFOHEDER)hDib;//此句可否成立? 什么意思嘛
注意:其中dwLen的长度大于BITMAPINFOHEDER类型的结构的长度。

解决方案 »

  1.   

    HANDLE <-> void *void *pAlloc = GlobalAlloc(GMEM_FIXED,dwLen);
    BITMAPINFOHEDER *pBmp = (BITMAPINFOHEDER *)pAlloc;为什么不可以呢?
      

  2.   

    可以,HANDLE是32位,指針也是32位
      

  3.   

    static CWnd* PASCAL FromHandle( HWND hWnd );Returns a pointer to a CWnd object when given a handle to a window
      

  4.   

    http://expert.csdn.net/Expert/topic/2281/2281961.xml?temp=.2137415
    楼主对句柄和指针的理解不正确
    建议你看看上面的贴子
      

  5.   

    有些句柄是可以转化的,比如楼主所举的例子
    有些不能转化,比如窗口句柄、菜单句柄等
    关键是看API定义说明
      

  6.   

    我想问的是经转化后,hDib指针(先假设它是指针)所指的已经分配的区域肯定会大于LPBITMAPINFOHEADER结构的长度(看下面的注意),那剩余的部分是否还有效呢?HANDLE hDib = GlobalAlloc(GMEM_FIXED,dwLen);
    LPBITMAPINFOHEDER a;
    a=(LPBITMAPINFOHEDER)hDib;//此句可否成立? 什么意思嘛
    注意:其中dwLen的长度大于BITMAPINFOHEDER类型的结构的长度。
      

  7.   

    DWORD dwLen = sizeof(BITMAPINFOHEDER);
    LPBYTE lpBuffer = new BYTE[dwLen];
    LPBITMAPINFOHEDER a;
    a=(LPBITMAPINFOHEDER)lpBuffer;
    ...
    delete[] lpBuffer;
    这样是正常的使用方法如果你一定要你那样做,还要dwLen大于sizeof(BITMAPINFOHEDER)也可以,只是多出的部分一直都没有用上而已,不过只要你GlobalFree(hDib)就不会泄漏!
      

  8.   

    谢谢Phourm() ,如果我想用多出来的部分,那dwLen-sizeof(BITMAPINFOHEDER)中的部分是否还可用?
      

  9.   

    谢谢Phourm() ,如果我想用多出来的部分,那dwLen-sizeof(BITMAPINFOHEDER)中的部分是否还可用?
    原代码:
    HANDLE hDib = GlobalAlloc(GMEM_FIXED,dwLen);
    LPBITMAPINFOHEDER a;
    a=(LPBITMAPINFOHEDER)hDib假如dwLen-sizeof(BITMAPINFOHEADER)中的部分原来已经写入了数据(在分配完空间后就写入数据)。那下面的语句是否还成立?
    char *a=(char*)a+sizeof(BITMAPINFOHEADER)//我想让起指向BITMAPINFOHEADER后的内存,而且还想访问这段内存中的内容(因为在强制转化以前,这一部分是有数据的)。这样是否可行?