要在oracle中取出图片,代码如下,帮忙看看有什么错误:
void CSEE::showbkgmodel(CString bkgname)
{
m_pRecordset.CreateInstance("ADODB.Recordset");
CString strCmd;
strCmd.Format(_T("SELECT * FROM PHOTO where M_NUM='%s'"),m_nList);  ////背景图片   HRESULT hr = m_pRecordset->Open(_variant_t(strCmd),_variant_t(((CPHOTOApp *)AfxGetApp())->m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(SUCCEEDED(hr))
{
if(m_pRecordset->adoEOF||m_pRecordset->BOF) 
{ return;
} long lDataSize = m_pRecordset->GetFields()->GetItem("PICTURE")->ActualSize;  //背景图片
if(lDataSize > 0)
{
_variant_t varBLOB; varBLOB = m_pRecordset->GetFields()->GetItem("PICTURE")->GetChunk(lDataSize);   //背景图片
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
if(m_pBMPBuffer = new char[lDataSize+1]) ///重新分配必要的存储空间
{
// char *pBuf =NULL;
byte *pBuf=(BYTE *)new char [1024];
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
memcpy(m_pBMPBuffer,pBuf,lDataSize); ///复制数据到缓冲区m_pBMPBuffer
SafeArrayUnaccessData (varBLOB.parray);
m_nFileLen = lDataSize;
m_hPhotoBitmap = BufferToHBITMAP(); ///生成BITMAP对象
}
}
}
}
HBITMAP OldBitmap;
CClientDC dc(this);
CDC MemDC;
MemDC.CreateCompatibleDC(&dc);
OldBitmap=(HBITMAP)MemDC.SelectObject(m_hPhotoBitmap);
dc.BitBlt(0,0,350,550,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(OldBitmap);}HBITMAP CSEE::BufferToHBITMAP()
{
HBITMAP hBmp;
LPSTR hDIB,lpBuffer = m_pBMPBuffer;
LPVOID lpDIBBits;
BITMAPFILEHEADER bmfHeader;
DWORD bmfHeaderLen; bmfHeaderLen = sizeof(bmfHeader);
strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen);
if (bmfHeader.bfType != ((WORD) ('M' << 8) | 'B')) return NULL;
hDIB = lpBuffer + bmfHeaderLen;
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB ;
BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ;
int nColors = bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1 << bmiHeader.biBitCount; 
if( bmInfo.bmiHeader.biBitCount > 8 )
lpDIBBits = (LPVOID)((LPDWORD)(bmInfo.bmiColors + bmInfo.bmiHeader.biClrUsed) + 
((bmInfo.bmiHeader.biCompression == BI_BITFIELDS) ? 3 : 0));
else
lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors);
CClientDC dc(this);
hBmp = CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS);
return hBmp;
}
void CSEE::OnOK() 
{
showbkgmodel(bkgname);}