大侠请帮调程序 (CArchive)在线
void CDdtView::OnDraw(CDC* pDC)
{
CDdtDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CString* str=new CString();
*str=_T("a_B_C_D");
CObject* pob;
SAFEARRAY * psf=NULL;
CStrand strand;
psf=strand.MakeBlock ((CObject*)str);
pob=strand.Expand (psf);
CString st2;
st2=*(CString*)pob;
pDC->TextOut (100,299,st2);
delete str;
}
SAFEARRAY * CStrand::MakeBlock(CObject *pObject)//将pObject串行化成连续的内存块并放入SAFEARRAY
{
CMemFile memfile;
long lMode = CArchive::store
| CArchive::bNoFlushOnDelete;
CArchive ar(&memfile, lMode ); ar.m_pDocument = NULL; 出错*ar.WriteObject(pObject); ar.Close();
long llen = memfile.GetLength(); unsigned char *pMemData = memfile.Detach(); SAFEARRAY *psa; psa = SafeArrayCreateVector( VT_UI1, 0, llen ); unsigned char *pData = NULL; SafeArrayAccessData( psa, (void**)&pData ); memcpy( pData, pMemData, llen ); SafeArrayUnaccessData(psa);
return psa;
}