奇怪的BEX64事件

just_pig 2015-02-10 04:07:12
VS2008下开发的64位WindowsServer2008的应用程序,运行中遇到这样的问题:

问题签名:
问题事件名称: BEX64
应用程序名: EMICSServer.exe
应用程序版本: 0.0.0.0
应用程序时间戳: 544de2aa
故障模块名称: mscorwks.dll
故障模块版本: 2.0.50727.5485
故障模块时间戳: 53a11d6c
异常偏移: 0000000000504ba9
异常代码: c0000409
异常数据: 0000000000000000
OS 版本: 6.1.7601.2.1.0.272.7
区域设置 ID: 2052
其他信息 1: 6aa7
其他信息 2: 6aa7135fe5734b0ee95520ed45d3dd13
其他信息 3: e57c
其他信息 4: e57cb71329859ea46710adeb4a0ff800

观察了一下,出现这个问题代码运行的位置,是一个循环运行的线程内,并不是第一次运行就发生这个问题,而是有时候运行了几天才会出这个问题,查了很多资料,也不知道BEX64是个什么东西,求指点。

之前咨询有人告诉我mscorwks.dll模块版本在64位下调用,存在兼容性问题。
于是我在64位WindowsServer虚拟机中编译了这个程序,但是还是有这个问题。
...全文
26397 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
just_pig 2015-02-11
  • 打赏
  • 举报
回复
引用 6 楼 wyd1520 的回复:
[quote=引用 4 楼 just_pig 的回复:] [quote=引用 3 楼 Z65443344 的回复:] 那就换个能支持64位系统的模块,而放弃兼容性不好的模块
我在64位WindowsServer2008下的VS2008编译的x64程序,调用的不是就应该是64位的mscorwks.dll吗? 为什么还会有这个问题,而且这个问题不是一启动就会出现的,有的时候运行了几天之后才会出现。[/quote] 你是直接调用Api函数吧。传入的参数要用最好用InPtr 做为参数,如果用int或其他的long做参数,就可能出问题的。[/quote] 似乎问题是出在这段代码里,麻烦帮我看一下 sockConn=socket(AF_INET,SOCK_STREAM,0); int TimeOut=1; //设置发送超时 if(::setsockopt(sockConn,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR) { //WSACleanup(); return -1; } TimeOut=1;//设置接收超时 if(::setsockopt(sockConn,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR) { //WSACleanup(); return -1; } fd_set rfd; struct timeval cTimeout; //时间结构体 FD_ZERO(&rfd); cTimeout.tv_sec = 1;//秒 cTimeout.tv_usec = 0; u_long ul=1; int ret = ioctlsocket(sockConn, FIONBIO, &ul); if(ret==SOCKET_ERROR) return 0; SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=inet_addr(ip.c_str()); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(port); connect(sockConn,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); FD_SET(sockConn,&rfd); ret = select(0, 0, &rfd, 0, &cTimeout); if(ret<=0) { //WSACleanup(); return -1; }else { ul = 0; ioctlsocket(sockConn,FIONBIO,&ul); //WSACleanup(); return 0; }
本拉灯 2015-02-10
  • 打赏
  • 举报
回复
引用 4 楼 just_pig 的回复:
[quote=引用 3 楼 Z65443344 的回复:] 那就换个能支持64位系统的模块,而放弃兼容性不好的模块
我在64位WindowsServer2008下的VS2008编译的x64程序,调用的不是就应该是64位的mscorwks.dll吗? 为什么还会有这个问题,而且这个问题不是一启动就会出现的,有的时候运行了几天之后才会出现。[/quote] 你是直接调用Api函数吧。传入的参数要用最好用InPtr 做为参数,如果用int或其他的long做参数,就可能出问题的。
winnowc 2015-02-10
  • 打赏
  • 举报
回复
BEX64的信息见msdn,BEX+c0000409就是/GS导致的错误。/GS是vc++编译器对缓冲溢出的防范措施。如果你的程序使用了非托管dll,那很可能是它导致的缓冲溢出,如果没用,可能是病毒或者其他软件的影响,或者是.net的bug。
just_pig 2015-02-10
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:
那就换个能支持64位系统的模块,而放弃兼容性不好的模块
我在64位WindowsServer2008下的VS2008编译的x64程序,调用的不是就应该是64位的mscorwks.dll吗? 为什么还会有这个问题,而且这个问题不是一启动就会出现的,有的时候运行了几天之后才会出现。
於黾 2015-02-10
  • 打赏
  • 举报
回复
那就换个能支持64位系统的模块,而放弃兼容性不好的模块
just_pig 2015-02-10
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
之前咨询有人告诉我mscorwks.dll模块版本在64位下调用,存在兼容性问题。 于是我在64位WindowsServer虚拟机中编译了这个程序,但是还是有这个问题。 既然告诉你在64位系统下有兼容性问题,为什么不编译成x86,而非要编译成x64呢 让它以32位运行不好吗
项目要求是以64位运行~我决定不了。。。
於黾 2015-02-10
  • 打赏
  • 举报
回复
之前咨询有人告诉我mscorwks.dll模块版本在64位下调用,存在兼容性问题。 于是我在64位WindowsServer虚拟机中编译了这个程序,但是还是有这个问题。 既然告诉你在64位系统下有兼容性问题,为什么不编译成x86,而非要编译成x64呢 让它以32位运行不好吗

7,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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