真是见鬼了,同样的程序别人机上能运行,我机上就出错。帮忙看看!!!

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.

...全文
126 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lf_77 2001-08-02
  • 打赏
  • 举报
回复
谢谢: MSVCer(家宝) 问题解决了
FireBow 2001-07-29
  • 打赏
  • 举报
回复
关注
zzh 2001-07-29
  • 打赏
  • 举报
回复
你检查一下你机器的配置情况,是不是跟不会出错的机器配置是一样的,特别的VC的补丁包是不是一致,RICHEDIT控件用到了一些OLEDB的东西,很有可能你们两台机器上的配置情况不一样,检查一下RICHEDIT的版本,
lf_77 2001-07-29
  • 打赏
  • 举报
回复
麻烦大家!
lf_77 2001-07-29
  • 打赏
  • 举报
回复
内容长点大家费心了
shiyutao2010 2001-07-29
  • 打赏
  • 举报
回复
gz
MSVCer 2001-07-29
  • 打赏
  • 举报
回复
贴子中的代码不是我前几天贴上去的吗!太激动了,好!让我解释一下吧!
回调函数DWORD CALLBACK Stream2Edit(DWORD dwCookie,LPBYTE pbBuff,LONG cb,LONG *pcb)
中第一个参数应传递的为内存句柄,即用GlobalAlloc分配内在后返回的句柄
代码中
EDITSTREAM es;
es.dwCookie=(DWORD)m_hData; //将内存句柄作为参数传给回调函数
明明说要传句柄吗!改一改,一定会成功的,我都用了好长时间了
lf_77 2001-07-29
  • 打赏
  • 举报
回复
win2000和98有关系吗?
RICHEDIT的版本怎样查?都是VC6.0

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧