WinCE Stack 异常
来源:互联网 发布:2017年java饱和了 编辑:程序博客网 时间:2024/05/22 18:22
在使用 VS2008 开发 WinCE7.0 的程序,测试发送 WM_COPYDATA 消息时,发现在 Debug 模式下接收方可以正确的接收到消息,消息中的数据也是正确的。换成 Release 模式后,接收方也能接收到消息,但有一接收方不进入数据解析函数。
两个消息的接收方,一个是用 SDK 开发的 WinCE 程序(称为 C 程序);另一个发送到发送 WM_COPYDATA 消息的自身应用。先将 WM_COPYDATA 发送给应用、再将同样的消息发送给 C 程序。
无论是在 Debug 模式,还是 Release 模式,C 程序都可以接收到正确的消息和数据。
由于一般使用 Debug 模式进行程序的开发与调试,在程序开发结束时才切换到 Release 模式,是否是在使用 Debug 模式开发过程中,修改了什么导致两者表现不一样?
由于已经可以确认代码没有问题,所以怀疑是系统的 Stack 出现问题。查看工程属性:配置属性/链接器/系统/堆栈保留大小,发现 Debug 模式下已经修改为默认值的 4 倍,即 262144,而 Release 模式下仍然在使用原始的默认值 65536。
修改此项的设置值为:262144 后,编译运行,一切正常。
OK 了。
代码逻辑(由于 Client 是正确的,不再分析 Client 的代码逻辑):
// 消息发送处消息打包与发送的过程COPYDATASTRUCT cs;FilesList FileInfo; // 待发送的数据,为一结构体,大小为 2624 字节// 给结构体 FileInfo + cs 赋值......cs.lpData = &FileInfo;// 消息发送if(NULL != hServer){ ::SendMessage(hServer,WM_COPYDATA,256,(LPARAM)&cs);}if(NULL != hClient){ ::SendMessage(hClient,WM_COPYDATA,126,(LPARAM)&cs);}// Server 消息接收LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ ...... switch (message) { case WM_COPYDATA: // Leo 出错时下面这句 LOG 有输入: [Agent]WndProc - message received from test app: 0x4A(256,738496) RETAILMSG(1,(L"[Client]%s - message received from server: 0x%X(%d,%d)\r\n",CString(__FUNCTION__),message,wParam,lParam)); { if(TRUE == ProcessMsgRcved(message,wParam,lParam)) { ...... } else { ...... } } break; ...... default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0;}BOOL ProcessMsgRcved(UINT message,WPARAM wParam,LPARAM lParam){ BOOL bRet = TRUE; switch(message) { case WM_COPYDATA: { COPYDATASTRUCT *pCs = (COPYDATASTRUCT *)lParam; // 由 LOG: [Agent]WndProc - message received from test app: 0x4A(256,738496) 知 pCs 不为空。 if(NULL != pCs) { // Leo 出错时没有下面这句 LOG 输入 // 按程序正常的流程,应该走到此句 LOG 才对! RETAILMSG(1,(L"[Server]WM_COPYDATA - %d,%d,0x%X\r\n",pCs->dwData,pCs->cbData,pCs->lpData)); ...... } } }}
0 0
- WinCE Stack 异常
- 编写Wince的APP时出现 'User Stack Overflow' 异常的解决办法
- 有关stack的异常
- WINCE 驱动异常分析
- WINCE异常向量地址问题
- WinCE 驱动异常调试方法
- 如何编译并打开WinCE Bluetooth Stack的LOG
- 如何编译WinCE Bluetooth Stack并打开的默认LOG
- 如何编译WinCE Bluetooth Stack并打开的默认LOG
- 未知异常: Maximum call stack size exceeded
- stack overflow异常分析及解决办法
- Maximum call stack size exceeded异常原因
- Java异常的栈轨迹(Stack Trace)
- Java异常的栈轨迹(Stack Trace)
- Java异常的栈轨迹(Stack Trace)
- C++异常(2) - 栈展开(stack unwinding)
- Java异常的栈轨迹(Stack Trace)
- Java异常的栈轨迹(Stack Trace)
- 更改Windows7 的远程桌面端口
- TCC89播放代码与 LOG 对应
- QPixmap 类显示图片
- WinCE 系统下移动存贮设备Storage 的拔插检测
- 面对完全看不懂的书
- WinCE Stack 异常
- Android使用Opencv
- 选择特定范围内的记录
- Apache中二级域名访问的配置
- 内存数据库
- c语言---数据的存储与运算
- 微博@就那样的诗宇刘:受不了了
- poj2096之概率DP入门
- 博主回忆,虽然车上的乘客对这