BOOL CPicture::LoadPictureData(char *pBuf, DWORD dwSize)
{
/*申请内存,得到新分配内存的句柄*/
HGLOBAL hGlobal = GlobalAlloc(GHND, dwSize);
if (hGlobal == NULL)
{
return FALSE;
}
char *pData = (char*)GlobalLock(hGlobal);
memcpy(pData, pBuf, dwSize);
GlobalUnlock(hGlobal); /*将数据载入IPicture接口*/
IStream *pStream = NULL;
BOOL bResult = FALSE;
if (CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) == S_OK)//创建数据流
{//从流中载入图象数据
if (OleLoadPicture(pStream, dwSize, FALSE, IID_IPicture, (LPVOID*)(&m_pPict)) == S_OK)
{
bResult = TRUE;
}
}
pStream->Release();
pStream = NULL;
GlobalFree(hGlobal);
hGlobal = NULL; return bResult;
}以上代码在大多数情况下正常,但是如果pBuf指向的图象数据被破坏了就出问题了。
问题出在OleLoadPicture函数一直不返回结果,程序就停止在那里不动了。
请各位大虾献计献策帮忙解决。类CPicture的定义:
class CPicture : public CPictureHolder

解决方案 »

  1.   

    http://www.vczx.com/article/show.php?id=477
      

  2.   

    try
    {
    if (SUCCEEDED(OleLoadPicture(pStream, dwSize, FALSE, IID_IPicture, (LPVOID*)(&m_pPict)))
    ...
    }
    catch(...)
    {
       ...
    }
      

  3.   

    破坏是什么意思?你自己程序访问越界的话要先解决访问越界的问题,否则不是图像载入不了这么简单http://dev.csdn.net/article/22/22243.shtm
      

  4.   

    1.程序访问没有发生越界的问题;
    2.图象文件被破坏是指文件的数据不完整,不是指该文件是一个非图象文件;
    3.OleLoadPicture函数在对2中的图象进行载入时,函数不返回任何结果,通过设置断点会发现程序停在了OleLoadPicture函数处,不再往下继续运行了。好象是OleLoadPicture函数内部停在了某个点上。
      

  5.   

    www.donews.net/darkness/archive/2004/09/17/101018.aspx
      

  6.   

    一周前, 測試部給我報了一個和你一模一樣的Bug,
    圖像文件格式被破壞後, 調用OleLoadPicture
    在Win2000下會導致無響應,
    WinXP下正常,我也找了很久, 沒能搞定,
    最後當作OS 接口的Bug了事.
      

  7.   

    WinXP能正常返回,
    不會死,
    Win2000就會執行不下去,我的開發機器用的是XP,
    所以在測試組測試時才發現.此題目前無解丫,
    sigh...
      

  8.   

    326646 Corrupted Images Cause Access Violation with OleLoadPicture Function 
    http://support.microsoft.com/default.aspx?scid=kb;en-us;326646
    324490 FIX: Corrupted GIF Images May Cause an Access Violation in OLE 
    http://support.microsoft.com/default.aspx?scid=kb;en-us;324490