例子看下去很美丽,使用的结果很痛苦,关于读取数据库OLE字段
例子看上去很美丽,使用的结果很痛苦,关于读取数据库OLE字段
Flash文件已经通过写函数写到数据库中了,下面的读取函数是在网络上找的例子改的,可是两个错误已经快让我崩溃了。
第一个是SafeArrayAccessData总是出错,请大侠帮忙看看这几个函数主要的作用,多谢。
第二个是如果SafeArrayUnaccessData,则后面不相关的函数会出现错误,提示是"user breakpoint called from code at 0x....
崩溃中。。。。
------解决方案--------------------
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); }