用内存中储存的图片文件,创建GDI+的Bit地图对象的有关问题

用内存中储存的图片文件,创建GDI+的Bitmap对象的问题。
我的一小段代码:
C/C++ code


//char * data,int datalen
//data 指向内存中的图片文件,图片文件是网络上发过来的(直接保存在硬盘上,然后双击打开,图片很正常)
//datalen 是图片文件的大小
    HGLOBAL hglobal=0;
    IStream* pStream = NULL;
    hglobal = ::GlobalAlloc(GMEM_FIXED,datalen);
    ::memcpy(hglobal,data,datalen);
    HRESULT res=::CreateStreamOnHGlobal(hglobal, FALSE, &pStream);                
    if (res == S_OK) 
    {
        this->m_ep.GCaptchaBmp=new Bitmap(pStream,NULL);
        pStream->Release(); 
        //....
    }
    else
    {
        //....
    }
    //....
    if(hglobal)
        ::GlobalFree(hglobal);

//图片是在之后的程序中显示



显示图片的时候,有时图片右下角有一区域是乱的。而如果把最后两句注释掉,不释放hglobal,那图片就能正常显示。
似乎是创建的Bitmap对象使用了hglobal所指向的内存,释放掉hglobal后,那部分内存被覆盖了一些。

请问,应该怎么解决 或者 有什么更好的办法用内存中储存的图片文件,创建GDI+的Bitmap对象么?

------解决方案--------------------
HRESULT res=::CreateStreamOnHGlobal(hglobal, FALSE, &pStream);
===>> HRESULT res=::CreateStreamOnHGlobal(hglobal, TRUE, &pStream);

显示完后最后再 pStream->Release();