真是见鬼了,同样的程序别人机上能运行,我机上就出错。帮忙看看!!!
lf_77 2001-07-29 11:37:30 Dialog中用RichEdit控件显示文件内容,bbbDlg.cpp中加入下内容:
1、回调函数Stream2Edit
DWORD CALLBACK Stream2Edit(DWORD dwCookie,LPBYTE pbBuff,LONG cb,LONG *pcb)
{
static DWORD dwStreamCount=0;
static BOOL bEndTransfer=FALSE;
DWORD n=0; //传给缓冲区的数据量
static DWORD dwDataSize;
//初始化
if( dwStreamCount==0 )
{
char *lpSource=(char *)GlobalLock( (HGLOBAL)dwCookie );
dwDataSize=strlen( lpSource );
GlobalUnlock( (HGLOBAL)dwCookie );
}
//数据已传输完毕或内存句柄为空
if( bEndTransfer ¦¦ dwCookie==NULL )
{
*pcb=0; //结束传输
bEndTransfer=FALSE; //重新置位
dwStreamCount=0; //重新准备计量
dwDataSize=0;
return 0;
}
if( dwStreamCount+cb>dwDataSize ) //要求传输量超过数据量
{
*pcb=n=dwDataSize-dwStreamCount; //只传给其余下的数据
bEndTransfer=TRUE; //此时表明传输数据到了流尾
}
else
*pcb=n=cb;
//填充缓冲区
LPBYTE lpSource=(LPBYTE)GlobalLock( (HGLOBAL)dwCookie );
memmove(pbBuff,lpSource+dwStreamCount,n);
dwStreamCount+=n;
GlobalUnlock( (HGLOBAL)dwCookie );
return 0;
}
2、OnInitDialog()中加入下代码:
char m_hData[500000];
CFile file1;
file1.Open("aaa.txt",CFile::modeRead);
int n=file1.GetLength();
file1.Read(m_hData,n);
file1.Close();
EDITSTREAM es;
es.dwCookie=(DWORD)m_hData; //将内存句柄作为参数传给回调函数
es.dwError=0;
es.pfnCallback=&Stream2Edit;
m_editInstanceView.StreamIn(CF_TEXT,es);
编译通过,运行出错,用Debug跟运行m_editInstanceView.StreamIn(CF_TEXT,es);时出如下提示:
Unhandled exception in bbb.exe(MSVCRTD.DLL)0x0000005:Access Violation.