在com中用CSocket类Create出现错误_karl_max的博客-程序员宅基地

技术标签: exception  null  thread  sockets  mfc  socket  

//debug mfc静态链接
在Com的一个方法中用CSocket类
CSocket  proxySK;
proxySK.create();  //这一句会出错

解决方法:
在函数的开头加上以下代码来在CSocket所在的Thread中初始化CSocket和SOCKET做映射的链表:
#define _afxSockThreadState AfxGetModuleThreadState() 
#define _AFX_SOCK_THREAD_STATE AFX_MODULE_THREAD_STATE 
 
 _AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState; 
      if (pState->m_pmapSocketHandle == NULL) 
         pState->m_pmapSocketHandle = new CMapPtrToPtr; 
      if (pState->m_pmapDeadSockets == NULL) 
         pState->m_pmapDeadSockets = new CMapPtrToPtr; 
      if (pState->m_plistSocketNotifications == NULL) 
         pState->m_plistSocketNotifications = new CPtrList;

据说是一个Bug

原文是这样说的
Hi,

When using MFC sockets in secondary threads in a statically linked MFC
Visual C++ 6.0 application, an unhandled exception occurs. The reason for
the unhandled exception is that an object of type CMapPtrToPtr pointer,
pointed to by m_pmapSocketHandle, is never created.
To resolve it the handle maps used by the sockets need to be created for
each thread.The following code shows a function to do this:
void SocketThreadInit()
{
#ifndef _AFXDLL
#define _AFX_SOCK_THREAD_STATE AFX_MODULE_THREAD_STATE
#define _afxSockThreadState AfxGetModuleThreadState()

_AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState;
if (pState->m_pmapSocketHandle == NULL)
pState->m_pmapSocketHandle = new CMapPtrToPtr;
if (pState->m_pmapDeadSockets == NULL)
pState->m_pmapDeadSockets = new CMapPtrToPtr;
if (pState->m_plistSocketNotifications == NULL)
pState->m_plistSocketNotifications = new CPtrList;

#endif
}
This function should be called once in each secondary thread before the
first socket is created in the new thread.

IMP : This bug was corrected in Visual Studio 6.0 Service Pack 3

Please refer to Q193101 from MSDN
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/karl_max/article/details/1764910

智能推荐

HPUX终端不能输入@字符问题解决_chenqiutu2846的博客-程序员宅基地

修改环境变量文件.profile。在文件开始地方加入如下部分。 ##############解决hpux终端上不能输入@字符######begin###### # Default (example of) super-user's .profile file # Do not...

hiho一下 第四十八周_weixin_30951389的博客-程序员宅基地

题目名称:拓扑排序·二题目链接:http://hihocoder.com/contest/hiho48/problem/1描述小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒。这事在校内BBS上立刻引起了大家的讨论,当然小Hi和小Ho也参与到了其中。从大家各自了解的情况中,小Hi和小Ho整理得到了以下的信息:校园网主干是由N个节点(编号1..N)组...

Halcon 的XLD 与matlab的cell 互相转换函数_matlab调用halcon_vision比心的博客-程序员宅基地

Halcon 的XLD 与matlab的cell 互相转换函数这是为了使用halcon中一些比较好的算子,在matlab中比较难找到。但是在halcon中得到了轮廓后,又想使用matlab进行进一步处理。所以写了两个转换函数:XLD2Cell,Cell2XLD首先说明halcon写入,然后是XLD2Cell函数,Cell2XLD函数,最后是halcon读入。一、Halc

反射获取当前私有字段和父类私有字段的值_获取抽象父类的值_小土豆子额的博客-程序员宅基地

写了一个将对象转换成map的方法可以参考 public static Map<String,Object> getObjectToMap(Object t) throws IllegalAccessException { Class className = t.getClass(); Map<String,Object>...

内核开发基础_你的牌打的太好啦的博客-程序员宅基地

1.构建linux系统 嵌入式系统一般包括硬件和软件两部分,其中硬件以一个高性能的处理器,通常是32为处理器为基础;软件是以一个多任务操作系统为基础的综合平台。 内核产品开发流程: 1.以开发商提供的EVM(评估)板为基础添加、修改、删除硬件,开发所需要的硬件。 2.Bootloader移植。将Bootloader移植到开发平台,使之能在平台上运行。 3.内核移植。

随便推点

Ubuntu下查看jdk安装路径_路和远方的博客-程序员宅基地

进入相应的目录 /usr/bin查看java的链接 ls -l java再进入到相应的目录 /etc/alternatives查看java的链接 ls -l java

五行代码构建静态博客_chenglang2310的博客-程序员宅基地

之前写过一个基于moco API的虚拟化框架,比较简单但是比较实用,在使用过程中有了一些有趣的实践。今天就分享一个利用moco API框架使用5行代码构建一个静态博客。博客文章是有mweb使用markdown文档生成的HTML文件,包括跳转连接和图片地址,部分的JS文件都是现成的,只需要做好...

前端笔记01——HTML实现一个简单的HTML页面_前端页面实现一篇课文_野生杂学家阿博的博客-程序员宅基地

前言很久没有写HTML页面,想要学习一些前端的语言。现在重拾有关于前端的东西,实现一个简单的HTML页面。一个简单的HTML页面实现的步骤1.创建一个Html文件,创建一个.txt文件,把.txt修改成.html,图标会变成你电脑默认的浏览器图标。2.点击右键,用记事本打开进行编辑。<html> <body&gt

ASO优化人一定要懂的APP推广知识_chenqian0881的博客-程序员宅基地

在移动互联网越来越火爆的今天,如果说手机、平板电脑是移动互联网的载体的话,那么,移动APP可以豪不夸张的说,将会或已经是移动互联网的核心组成部分,2014年我国移动互联网中的网民达到了6.86亿,庞大的网民基数,就意味着庞大的潜在用户群。也正因为如此,近两年APP行业的逐渐兴起,短短时间内A...

js实现正则表达式验证邮箱_js 用正则验证是不是邮箱_cherishSpring的博客-程序员宅基地

js实现正则表达式验证邮箱//这个验证有问题,[email protected]这样子的也能通过function check(){//验证账号是否合法//验证规则:字母,数字,下划线组成,字母开头,4-16位//语法:/^\w$/    \w*\w{0,}//var filter=/^[a-zA-Z]\w{3,15}$/;//var filter=new Re

StringBeans portal 安装配置说明--翻译(五)_chenghan9242的博客-程序员宅基地

VI. 创建新用户 ---------------------- 1. 以管理员登录. 点击tab 标签的菜单栏转到 “用户管理”页。 2.. 在左边的面板上,可见到 用户和角色菜单,用户项为高亮显示 在页面上按下面的说明点击“新建...

推荐文章

热门文章

相关标签