返回信息流想问下下面这段代码的“fputws((LPCTSTR)pMsg->lParam,fp)”错在哪里啊?pMsg->lParam是“A pointer to a null-terminated string that is the window text".运行的时候出现"Debug Assertion failed"说"xx"内存空间是只读的。想问哪位大牛要咋改啊?
感激不尽!
LRESULT WINAPI CallWndProc(int nCode,WPARAM wparam,LPARAM lparam)
{
if(nCode<0)
{
return CallNextHookEx(CurrentHook,nCode,wparam,lparam);
}
FILE *fp;
//UINT size;
//UINT j;
PCWPSTRUCT pMsg=(PCWPSTRUCT)lparam;
fp=fopen("D:\\My Documents\\Visual Studio 2008\\Projects\\TestHook_exe\\TestHook_exe\\MsgHook.txt","a");
if(fp!=NULL&&pMsg->message==WM_SETTEXT)
{
fprintf(fp,"\nWindow:%08x Message ID:%08x\n",pMsg->hwnd,pMsg->message);
fprintf(fp,"Window Text:");
fputws((LPCTSTR)pMsg->lParam,fp);
}
fclose(fp);
return(CallNextHookEx(CurrentHook,nCode,wparam,lparam));
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #38783同步于 2010/5/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
问一个和内存有关的问题
shuitian
2010/5/1镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
【 在 vivienluke 的大作中提到: 】
: 就这么一段代码是看不出来咋改的
: 不过你的问题应该是
: pMsg 的值是空的,或者指向的空间已经被释放,导致内存访问出错
: ...................
谢谢!我改了下,先判断“pMsg->lParam"非空在打印到文件里,没出现内存错误的情况了。但只能把英文解析出来,中文解析不出来。这是什么原因呢?我看了下工程属性,用的是“Unicode字符集”啊。谢谢!
现在应该是Unicode编码的问题。
找到网上一个说明:“如果要读写Unicode格式的文本文件, 必须切换到typeBinary方式, 因为这会影响fputws/fgetws的工作方式(具体情况参考MSDN)。”
来源:http://wangzecheng125.blog.163.com/blog/static/30462556200917104935586/
【 在 shuitian 的大作中提到: 】
: : 就这么一段代码是看不出来咋改的
: : 不过你的问题应该是
: : pMsg 的值是空的,或者指向的空间已经被释放,导致内存访问出错
: ...................
【 在 Grape 的大作中提到: 】
: 现在应该是Unicode编码的问题。
: 找到网上一个说明:“如果要读写Unicode格式的文本文件, 必须切换到typeBinary方式, 因为这会影响fputws/fgetws的工作方式(具体情况参考MSDN)。”
: 来源:http://wangzecheng125.blog.163.com/blog/static/30462556200917104935586/
: ...................
谢谢!