WSAAsyncSelect能在动态链接库中用吗

someone 东方网力 2003-12-12 03:17:48
我想将网络通信的服务端和客户端都封装成dll,请问各位大侠,WSAAsyncSelect函数在dll中用有效吗,与WSAAsyncSelect关联的各种事件如何才能触发?
...全文
17 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
netsys2 2003-12-12
不好办。。

DLL没有Hwnd
  • 打赏
  • 举报
回复
someone 2003-12-12
to: netsys2(抓住领头羊)
我理解了一下您刚才的话,SOCKET事件触发的消息直接发到了调用者的窗口,就是说把
OnNetEvent()函数放在上层程序中,然后上层程序就能收到触发的各种消息。
但我的意思是想把通信相关的部分放在DLL中,即想把SOCKET触发的各种消息在先作一些处理,再将必要的信息传到上层调用者。这样能做到吗?
  • 打赏
  • 举报
回复
someone 2003-12-12
在dll中应当怎样用呢?
我现在是这样用的:

先定义:
#define NETWORK_EVENT WM_USER+100 //定义网络事件

然后加入消息映射:
(.h文件)
// Generated message map functions
//{{AFX_MSG(CMss11Dlg)
afx_msg void OnNetEvent(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

(.cpp文件):
BEGIN_MESSAGE_MAP(CMss11Dlg, CDialog)
//{{AFX_MSG_MAP(CMss11Dlg)
//}}AFX_MSG_MAP
ON_MESSAGE(NETWORK_EVENT, OnNetEvent)
END_MESSAGE_MAP()


void CMss11Dlg::OnNetEvent(WPARAM wParam, LPARAM lParam)
{
//调用API函数,得到网络事件类型
int iEvent = WSAGETSELECTEVENT(lParam);

//得到客户端套接字
SOCKET pSock = (SOCKET)wParam;

switch(iEvent)
{
case FD_ACCEPT:
...
break;

case FD_CLOSE: //客户端断开事件:
...
break;

case FD_READ: //网络数据包到达事件
...
break;

case FD_WRITE: //发送网络数据事件
...
break;

default: break;
}
}

在建立SOCKET时
if (WSAAsyncSelect(m_socket, GetSafeHwnd(), NETWORK_EVENT,
FD_ACCEPT | FD_CLOSE | FD_READ | FD_WRITE) != SOCKET_ERROR)
...



在DLL中用的话应该怎样用呢?
  • 打赏
  • 举报
回复
netsys2 2003-12-12
可以封装,

看看下面的说明:

Remarks

This function is used to request that the Windows Sockets DLL should send a message to the window hWnd whenever it detects any of the network events specified by the
lEvent parameter. The message which should be sent is specified by the wMsg parameter. The socket for which notification is required is identified by s.

在调用DLL时,会传入主窗口句炳,SOCKET事件触发的消息就会发给调用者的窗口,你就可以自己处理了
  • 打赏
  • 举报
回复
相关推荐
发帖
通信技术
加入

4229

社区成员

通信技术相关讨论
申请成为版主
帖子事件
创建了帖子
2003-12-12 03:17
社区公告
暂无公告