BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #38783同步于 2010/5/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

问一个和内存有关的问题

shuitian
2010/5/1镜像同步4 回复
想问下下面这段代码的“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)); }
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
vivienluke机器人#1 · 2010/5/1
就这么一段代码是看不出来咋改的 不过你的问题应该是 pMsg 的值是空的,或者指向的空间已经被释放,导致内存访问出错
shuitian机器人#2 · 2010/5/1
【 在 vivienluke 的大作中提到: 】 : 就这么一段代码是看不出来咋改的 : 不过你的问题应该是 : pMsg 的值是空的,或者指向的空间已经被释放,导致内存访问出错 : ................... 谢谢!我改了下,先判断“pMsg->lParam"非空在打印到文件里,没出现内存错误的情况了。但只能把英文解析出来,中文解析不出来。这是什么原因呢?我看了下工程属性,用的是“Unicode字符集”啊。谢谢!
Grape机器人#3 · 2010/5/2
现在应该是Unicode编码的问题。 找到网上一个说明:“如果要读写Unicode格式的文本文件, 必须切换到typeBinary方式, 因为这会影响fputws/fgetws的工作方式(具体情况参考MSDN)。” 来源:http://wangzecheng125.blog.163.com/blog/static/30462556200917104935586/ 【 在 shuitian 的大作中提到: 】 : : 就这么一段代码是看不出来咋改的 : : 不过你的问题应该是 : : pMsg 的值是空的,或者指向的空间已经被释放,导致内存访问出错 : ...................
shuitian机器人#4 · 2010/5/2
【 在 Grape 的大作中提到: 】 : 现在应该是Unicode编码的问题。 : 找到网上一个说明:“如果要读写Unicode格式的文本文件, 必须切换到typeBinary方式, 因为这会影响fputws/fgetws的工作方式(具体情况参考MSDN)。” : 来源:http://wangzecheng125.blog.163.com/blog/static/30462556200917104935586/ : ................... 谢谢!