//代码如下 ,实在想不到在哪有内存泄漏.....
//放到时间响应函数里,内存暴涨
HWND hDeskWnd = ::GetDesktopWindow();//获得屏幕的HWND.
HDC hScreenDC = ::GetDC(hDeskWnd);   //获得屏幕的HDC.
HDC MemDC = ::CreateCompatibleDC(hScreenDC);
RECT rect;  ::GetWindowRect(hDeskWnd,&rect); HBITMAP hBitmap = ::CreateCompatibleBitmap(hScreenDC,rect.right,rect.bottom);
HGDIOBJ hOldBMP = ::SelectObject(MemDC,hBitmap);
::BitBlt(MemDC,0,0,rect.right,rect.bottom,hScreenDC,rect.left,rect.top,SRCCOPY);
hBitmap=(HBITMAP)::SelectObject(MemDC,hOldBMP); m_DeskImage.Attach(hBitmap);
IStream* pStmImage = NULL; HGLOBAL hMemBmp = GlobalAlloc(GMEM_MOVEABLE,0);//可移动的缓冲区
if (hMemBmp == NULL) return NULL;
CreateStreamOnHGlobal(hMemBmp, FALSE, &pStmImage);//将内存区B作为流的起始
if (pStmImage == NULL) {
GlobalFree(hMemBmp);
MessageBox("为空");
return NULL;
}
m_DeskImage.Save(pStmImage,Gdiplus::ImageFormatJPEG); BYTE* pbyBmp = (BYTE *)GlobalLock(hMemBmp);//得到缓冲区的起始地址

//CFile mfile("234.jpg",CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
GlobalUnlock(hMemBmp);
//mfile.Write(pbyBmp,GlobalSize(hMemBmp));
//mfile.Close();
int msize=GlobalSize(hMemBmp);
int seek=0;
int sndcount=0;
m_gpackage.ncount=msize;
while (1)
{
memcpy(m_gpackage.m_buf,pbyBmp+seek,3072);
sndcount=m_clientsock.Send(&m_gpackage,sizeof(package));
seek+=3072;
//TRACE("%d,seek:%d,size:%d\n",sndcount,seek,msize);
if(msize-seek<=3072)
{
memcpy(m_gpackage.m_buf,pbyBmp+seek,msize-seek);
sndcount=m_clientsock.Send(&m_gpackage,sizeof(package));
break;
}

}

pStmImage->Release();
GlobalFree(hMemBmp);
if(m_DeskImage)
{
m_DeskImage.Detach();
m_DeskImage.Destroy();

}
::DeleteObject(hBitmap); //::ReleaseDC(hDeskWnd,MemDC)
::DeleteObject(MemDC);
::DeleteDC(MemDC);



::ReleaseDC(hDeskWnd,hScreenDC);
::DeleteDC(hScreenDC);

解决方案 »

  1.   

    找到了,if(m_DeskImage)
    {
    HBITMAP hBitmapc=m_DeskImage.Detach();
    ::DeleteObject(hBitmapc);//////////////////////就在这里
    m_DeskImage.Destroy();

    }
    这个分....................................?????????????////
      

  2.   

    这些东西装个Boundchecker就可以很容易找出来的.
      

  3.   

    我有这方面的vc源码,涉及到用动态jpeg压缩方法在服务端处理数据,然后通过缓存数据流传输数据,c/s 结构,两端程序,有兴趣就跟我联系。qq 149431298你也可以看页面http://auction1.taobao.com/auction/0/item_detail-0db1-4a08b41441d8c9cb1e8de30d1b65cce2.jhtml里面有详细的功能说明。