列集IPicture接口的问题,UP的也有分数
我用同样的方法列集2个指针,一个是recordset,一个是IPicture,前者成功,后者失败。前者基于IDispatch,后者基于IUnknown.代码如下:
列集recordset:
STDMETHODIMP CAdo::GetRecordset(IDispatch **ppVal)
{
_ConnectionPtr pConnection;
HRESULT hr;
hr = pConnection.CreateInstance(__uuidof(Connection));
if(SUCCEEDED(hr))
{
pConnection->Open("Provider=SQLOLEDB;Network Address=127.0.0.1;Initial Catalog=李行毕业设计","sa","sa",adModeUnknown);
}
_RecordsetPtr pRecordset;
pRecordset.CreateInstance("ADODB.Recordset");
CString temp = CString("SELECT * FROM 学生表");
_variant_t sql;
sql.SetString(temp);
pRecordset->CursorLocation = adUseClient;
hr = pRecordset->Open(sql, pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
pRecordset->PutRefActiveConnection(NULL);
pConnection->Close();
if(pRecordset==NULL)
{
*ppVal=NULL;
return S_OK;
}
*ppVal = pRecordset;
pRecordset->AddRef();
return S_OK;
}
列集IPicture:
STDMETHODIMP CMyIPicture::GetIPicture(IUnknown **ppValue)
{
*ppValue=NULL;
IStream *pStm=NULL;
CString m_sPath(L"c:\\windows\\web\\wallpaper\\Bliss.jpg");
FILE *pFile=NULL;
if ( NULL == (pFile = fopen(m_sPath, "rb")) )
return S_FALSE;
long FileSize = _filelength(_fileno(pFile));
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, FileSize);
LPVOID pvData = NULL;
if (hGlobal != NULL)
{
if ((pvData = GlobalLock(hGlobal)) != NULL)
{
long size = fread(pvData,sizeof(char),FileSize,pFile);
if (FileSize != size)
{
fclose(pFile);
return S_FALSE;
}
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);
}
}
fclose(pFile);
CComPtr<IPicture> pPicture;
HRESULT hr=OleLoadPicture(pStm,FileSize,TRUE,IID_IPicture,(LPVOID*)&pPicture.p);
if (S_OK == hr)
{
hr=pPicture->QueryInterface(__uuidof(IPicture), (void **)ppValue);
}
return hr;
}
尤其奇怪的是列集IPicture的时候,我跟踪到接口方法里,知道return hr前,hr的值都是S_OK的,但是返回到客户端就E_UNEXCEPTED的,未预料的错误,看来是列集出了点问题了。
大家帮我看看是为什么?
另外UP的也会有分数