例子看下去很美丽,使用的结果很痛苦,关于读取数据库OLE字段

例子看上去很美丽,使用的结果很痛苦,关于读取数据库OLE字段
Flash文件已经通过写函数写到数据库中了,下面的读取函数是在网络上找的例子改的,可是两个错误已经快让我崩溃了。

第一个是SafeArrayAccessData总是出错,请大侠帮忙看看这几个函数主要的作用,多谢。

第二个是如果SafeArrayUnaccessData,则后面不相关的函数会出现错误,提示是"user breakpoint called from code at 0x....

崩溃中。。。。

C/C++ code
    varBlob=pRst->GetFields()->GetItem("flash")->GetChunk(m_iDataSize);
    if(varBlob.vt==(VT_ARRAY|VT_UI1))
    {
        BYTE* pBuf = NULL;
        
        pBuf = (BYTE*)GlobalAlloc(GMEM_FIXED, m_iDataSize);  
        HRESULT hr=SafeArrayAccessData(varBlob.parray, (void**)&pBuf);    //返回值总是E_UNEXCEPTED

        CFile f(strFileName, CFile::modeCreate | CFile::modeWrite);  
        LPSTR buffer = (LPSTR)GlobalLock((HGLOBAL)pBuf);  
        f.Write(buffer, m_iDataSize);
        GlobalUnlock((HGLOBAL)pBuf);
        
        SafeArrayUnaccessData (varBlob.parray);  //这句话回导致后面的SetStaticText出错,见鬼了。
        f.Close();  

        strFilesize.Format("Flash大小:%d",m_iDataSize);
        SetStaticText(IDC_FILESIZE,strFilesize,RGB(0,0,255));

        m_stTip.SetWindowText("正在播放数据库中的Flash对象");
        m_swf.SetMovie(strFileName);

        //立即删除文件,避免被偷偷拷贝
        //DeleteFile(strFileName);
    }


------解决方案--------------------
C/C++ code
    m_iDataSize = pRst->GetFields()->GetItem("flash")->ActualSize;
    varBlob=pRst->GetFields()->GetItem("flash")->GetChunk(m_iDataSize);
    if(varBlob.vt==(VT_ARRAY|VT_UI1))
    {
        BYTE* pBuf = NULL;
        
        //pBuf = (BYTE*)GlobalAlloc(GMEM_FIXED, m_iDataSize);  
        HRESULT hr=SafeArrayAccessData(varBlob.parray, (void**)&pBuf);    //返回值总是E_UNEXCEPTED

        CFile f(strFileName, CFile::modeCreate | CFile::modeWrite);  
        //LPSTR buffer = (LPSTR)GlobalLock((HGLOBAL)pBuf);  
        //f.Write(buffer, m_iDataSize);
        f.Write(pBuf, m_iDataSize);
        //GlobalUnlock((HGLOBAL)pBuf);
        
        SafeArrayUnaccessData (varBlob.parray);  //这句话回导致后面的SetStaticText出错,见鬼了。
        f.Close();  

        strFilesize.Format("Flash大小:%d",m_iDataSize);
        SetStaticText(IDC_FILESIZE,strFilesize,RGB(0,0,255));

        m_stTip.SetWindowText("正在播放数据库中的Flash对象");
        m_swf.SetMovie(strFileName);

        //立即删除文件,避免被偷偷拷贝
        //DeleteFile(strFileName);
    }