//头文件中
typedef struct _PER_IO_DATA
{
WSAOVERLAPPED ol; char *buf; // Buffer
int buflen; // Length of the buffer int operation; // Type of operation issued
#define OP_ACCEPT 0 // AcceptEx
#define OP_READ 1 // WSARecv/WSARecvFrom
#define OP_WRITE 2 // WSASend/WSASendTo
} PER_IO_DATA, * LPPER_IO_DATA;//源文件中
WSABUF wbuf;
Flags = 0;
WSAEVENT Event;
char buffer[4096];
char buffer[4096];lpPerIoData = new _PER_IO_DATA;
ZeroMemory(&(lpPerIoData->ol), sizeof(OVERLAPPED));
//运行到这里时debug看到lpPerIoData->ol的对应项显示:
//"CXX0030: Error: expression cannot be evaluated"
Event = WSACreateEvent();
lpPerIoData->ol.hEvent = Event;lpPerIoData->buflen=4096;
memcpy(buffer, &"", sizeof(buffer));
lpPerIoData->buf=buffer;wbuf.len = lpPerIoData->buflen;
wbuf.buf = lpPerIoData->buf;lpPerIoData->operation = OP_READ;i = WSARecv(Accept,
&wbuf,
1,
&RecvBytes,
&Flags,
&(lpPerIoData->ol),
wbuf.len = lpPerIoData->buflen;
NULL); //此处出现了异常错误!?delete lpPerIoData;/////////////////////////////////////////////////////////////////
是不是上面的lpPerIoData->ol导致的异常错误呢?
怎么解决呢?
小弟调了两天了!
万分感谢!
typedef struct _PER_IO_DATA
{
WSAOVERLAPPED ol; char *buf; // Buffer
int buflen; // Length of the buffer int operation; // Type of operation issued
#define OP_ACCEPT 0 // AcceptEx
#define OP_READ 1 // WSARecv/WSARecvFrom
#define OP_WRITE 2 // WSASend/WSASendTo
} PER_IO_DATA, * LPPER_IO_DATA;//源文件中
WSABUF wbuf;
Flags = 0;
WSAEVENT Event;
char buffer[4096];
char buffer[4096];lpPerIoData = new _PER_IO_DATA;
ZeroMemory(&(lpPerIoData->ol), sizeof(OVERLAPPED));
//运行到这里时debug看到lpPerIoData->ol的对应项显示:
//"CXX0030: Error: expression cannot be evaluated"
Event = WSACreateEvent();
lpPerIoData->ol.hEvent = Event;lpPerIoData->buflen=4096;
memcpy(buffer, &"", sizeof(buffer));
lpPerIoData->buf=buffer;wbuf.len = lpPerIoData->buflen;
wbuf.buf = lpPerIoData->buf;lpPerIoData->operation = OP_READ;i = WSARecv(Accept,
&wbuf,
1,
&RecvBytes,
&Flags,
&(lpPerIoData->ol),
wbuf.len = lpPerIoData->buflen;
NULL); //此处出现了异常错误!?delete lpPerIoData;/////////////////////////////////////////////////////////////////
是不是上面的lpPerIoData->ol导致的异常错误呢?
怎么解决呢?
小弟调了两天了!
万分感谢!
解决方案 »
- VC如何控制WAVE快进与倒退?
- 【请问】WinCE下录音音量的问题
- 如何用消息操纵按钮?
- 一个TCP链路处理的方案问题<<--问题解决就结贴
- 怎么样才能动态执行一个函数?比如。。。(请进)
- 接上帖...200分大家来关注啊...
- 再一次发贴,特训游戏火箭版,前20名下载试玩者每人5分
- 如何将2个以上的ControlBar(垂直方向)排在同一列?(ControlBar不允许停靠在DockBar上)
- 蠢人求助??CComboBox??CListBox
- 科班出身重要吗???????半路出家怎么办???????
- 关于套接字和数据库问题,急等!
- 如何实现对话框,在点击最小化按钮后,缩到托盘里。而不是最小化到任务栏??
ZeroMemory(&(lpPerIoData->ol), sizeof(WSAOVERLAPPED ));
那样写应该没错吧;
&wbuf,
1,
&RecvBytes,
&Flags,
&(lpPerIoData->ol),
wbuf.len = lpPerIoData->buflen;
NULL);
这段贴的有点问题吧;是不是应该是这样的:
i = WSARecv(Accept,
&wbuf,
1,
&RecvBytes,
&Flags,
&(lpPerIoData->ol),
NULL);
wbuf.len = lpPerIoData->buflen;
如果是这样那么你用了异步操作,那么最后一个参数能为空么?
还有其他问题??
郁闷ing...
你说的那段是我的笔误,程序里不是那么写的,对不起:)
我用的是完成端口,最后一个参数是空的。
在哪里看呢?
我感觉就是lpPerIoData->ol初始化的问题,但我找不出来。