社区
网络编程
帖子详情
使用继承自CAsyncSocket的类做的通讯DLL控件,只要Create一个Socket就会提示"Debug Assertion Failed"的错误???
sundy26
2004-08-03 09:08:03
我知道CAsyncSocket是MFC进行了封装,添加了一个隐形的窗口类,但是我也看到有的程序直接用MFC封装的CSocket类也可以做成DLL形式呀?
这有什么不同吗?
PS:在EXE程序测试一起正常。
...全文
280
15
打赏
收藏
使用继承自CAsyncSocket的类做的通讯DLL控件,只要Create一个Socket就会提示"Debug Assertion Failed"的错误???
我知道CAsyncSocket是MFC进行了封装,添加了一个隐形的窗口类,但是我也看到有的程序直接用MFC封装的CSocket类也可以做成DLL形式呀? 这有什么不同吗? PS:在EXE程序测试一起正常。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
simonjp
2004-09-06
打赏
举报
回复
其实,你用CSocket就可以了,你GetLastError看看,就是关于阻塞的错误
sundy26
2004-08-04
打赏
举报
回复
没有办法,只好使用原始套接字从新写了一个。
结帖
sundy26
2004-08-03
打赏
举报
回复
我随便新建一个MFC DLL的工程,并且选择添加Socket的支持。
新建一个类CMySocket继承自CAsyncSocket,
然后在CSocketClientApp类头文件
CMySocket m_mySocket;
同样在函数中:
void CSocketClientApp::InitSocketConnect(char * strIP, int connectPort)
{
m_mySocket.Create();//只要调用了这一句就会出错。
}
特别强调:
1、在Exe程序中都不会有问题。
2、也能正常连接和收发数据,但退出的时候或者再次连接的时候会出现"Debug Assertion Failed"的错误.
出步判断应该是CAsyncSocket类做成DLL,或者Socket通讯在DLL有什么特别的吗?
sundy26
2004-08-03
打赏
举报
回复
不是ATL的,就是一个基于MFC 的DLL
/*************** DLL和Socket初始化 *********************/
BEGIN_MESSAGE_MAP(CSocketClientApp, CWinApp)
END_MESSAGE_MAP()
// CSocketClientApp 构造
CSocketClientApp::CSocketClientApp()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的一个 CSocketClientApp 对象
CSocketClientApp theApp;
// CSocketClientApp 初始化
BOOL CSocketClientApp::InitInstance()
{
CWinApp::InitInstance();
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}
return TRUE;
}
/********************************************
函数名称:接口函数,Connect
功能:初始化端口侦听
参数:listenPort:侦听端口
是否连接回调函数定义:
typedef void (*CDATACALLBACK)(PackHead *ph, char *buf) ; //回调函数定义
参数:lpCallBack:回调函数
数据接收回调函数定义:
typedef void (*CISCONNECT)(PackHead *ph, char *buf) ; //回调函数定义
参数:lpDataCallBack:
返回:0:OK,else error
*********************************************/
extern "C" _declspec(dllexport) void Connect(char *strIP,int connectPort)
{
//AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
theApp.InitSocketConnect(strIP,connectPort);
}
void CSocketClientApp::InitSocketConnect(char * strIP, int connectPort)
{
myclient.Close();
int IsConnect = -1;
IsConnect = myclient.InitClientRequest(strIP,connectPort);
if(IsConnect==0)
{
myclient.Bind(3,&myctrl);
myctrl.SetComm(&myclient);
}
}
danielzhu
2004-08-03
打赏
举报
回复
你的DLL是不是ATL的?讲清楚一点,然后,你怎么初始化的?
sundy26
2004-08-03
打赏
举报
回复
有没有人告诉我使用CAsyncSocket能不能做成DLL形式??
sundy26
2004-08-03
打赏
举报
回复
>>>对了,初始化工作应该在应用此DLL的主程序中初始化,而不要将初始代码添加在DLL的InitInstance中。
那为什么创建DLL工程的时候,可以添加Socket支持??
现在问题在于调试到Create发现并不会出错,只有退出程序时才报错,但我将Create Socket这一段代码屏蔽就没有问题。
我的工程是VC7.01的应该不存在打补丁的问题。
sundy26
2004-08-03
打赏
举报
回复
我连接后直接退出程序会出现上面的错误,但如果我在退出程序之前
先调用Close函数关闭Socket就不会有这个错误?
Why?
gracezhu
2004-08-03
打赏
举报
回复
初始化SOCKET库,在调用Create失败后,调用GetLastError获取返回值
DentistryDoctor
2004-08-03
打赏
举报
回复
对了,初始化工作应该在应用此DLL的主程序中初始化,而不要将初始代码添加在DLL的InitInstance中。
DentistryDoctor
2004-08-03
打赏
举报
回复
既然CAsyncSocket没问题,那问题可能出现你的类上面了,至于CAsyncSocket与CSocket有什么区别,VC++带得有MFC的源代码,自己读读吧。
sundy26
2004-08-03
打赏
举报
回复
添加了 AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
问题还是一样
sundy26
2004-08-03
打赏
举报
回复
有初始化的:
BOOL CSocketSeverDLLApp::InitInstance()
{
CWinApp::InitInstance();
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}
return TRUE;
}
程序里面没有用到多线程。
gracezhu
2004-08-03
打赏
举报
回复
CAsyncSocket在线程中会报这个异常,参考KB
PRB: Assertion Failed on Line 837 - Sockcore.cpp
Q140527
FIX: Unhandled Exception Using MFC Sockets in Visual C++ 6.0
Q193101
另外,在MFC DLL下需要添加AFX_MANAGE_STATE(AfxGetStaticModuleState( ))宏
whale
2004-08-03
打赏
举报
回复
在DllMain中调用AfxSocketInit初始化Windows Sockets.
Socket
,
CA
sync
Socket
,C
Socket
介绍
其中,
CA
sync
Socket
类
继承
自 C
Socket
类
,用于处理异步
Socket
操作。 - **特点**:
CA
sync
Socket
主要用于实现异步
Socket
通信,它可以自动处理
Socket
事件(如接收数据、发送数据等),并通过回调函数通知应用...
使用
CA
sync
Socket
类
实现异步网络通信
- 创建
一个
新
类
`Client
Socket
`
继承
自
CA
sync
Socket
。 - 在
类
中声明一些成员变量,如是否连接状态`m_bConnected`、接收数据长度`m_nRecvLength`、发送数据长度`m_nSendLength`以及发送和接收缓冲区。 - 重载网络...
利用
CA
sync
Socket
类
实现
Socket
编程
1. **定义
类
**:创建
一个
名为`MySock`的新
类
,并让它
继承
自`
CA
sync
Socket
`。 2. **添加头文件**: ```cpp #include "CSockClient.h" #include "CSockClientDlg.h" #include ``` 3. **声明成员变量**: ```cpp...
CA
sync
Socket
类
的UDP通信
在Windows编程环境中,
CA
sync
Socket
类
是MFC(Microsoft Foundation Classes)库提供的
一个
高级网络编程接口,用于处理TCP和UDP协议。本篇文章将深入探讨如何
使用
CA
sync
Socket
类
实现异步UDP通信,以及其在局域网内的...
MFC下
使用
CA
sync
Socket
类
建立TCP客户端与服务器.zip
1. **创建
CA
sync
Socket
对象**:同样,创建
一个
继承
自
CA
sync
Socket
的
类
,如`CTcpClient
Socket
`。 2. **连接服务器**:
使用
`Connect()`函数发起连接请求,指定服务器的IP地址和端口号。连接成功后,`OnConnect()`
会
被...
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章