HANDLE问题求助!!! 我写了一个程序,老是在CloseHandle的时候提示出错!说是Invalid Handle,希望各位大侠帮忙,谢~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是你要关闭的Handle无效,原因大多因为没有正确地得到Handle 你的Handle是非法的句柄,你单步调试一下,看是地址是什么值,是否具有意义 哦,那是什么原因呢??应该怎么解决啊?源码如下:HANDLE hd=CreateEvent(NULL,TRUE,FALSE,str); if(hd==NULL) { Sleep(100); hd=CreateEvent(NULL,TRUE,FALSE,str); if(hd==NULL) { return JMJC_PHISICS_OVERLAPPED_EVENT_ERROR; } } Overlapped.hEvent=hd; Overlapped.Offset = 0; Overlapped.OffsetHigh = 0; DWORD size = 0; if(!PurgeComm(m_hCom, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT)) { return JMJC_PHISICS_COMCONFIGERR; } WriteFile(m_hCom,buf,nCount,&size,&Overlapped); DWORD dw=GetLastError(); if(dw != 0 && dw != ERROR_IO_PENDING) { return JMJC_PHISICS_COMRWERR; } else if(dw == ERROR_IO_PENDING) { if(dw == WAIT_TIMEOUT) { return JMJC_PHISICS_COMRWERR; } else if(dw == WAIT_ABANDONED) { return JMJC_PHISICS_COMRWERR; } } CloseHandle(hd); 因为你的str也就是event的名字可能和一些已经存在的event,semaphore,mutex,waitable timer,job或者file mapping object引起ERROR_INVALID_HANDLE,因为这些对象在同一个name space里有相同的名字 你应该把Overlapped定义成全局或成员变量, 在打开串口的时候创建事件Overlapped.hEvent = CreateEvent(NULL,TRUE,FALSE,str);然后在关闭串口的时候再关闭事件CloseHandle(Overlapped.hEvent); 内核对象的名字最好用GUID, 你改一下再试试看 这算是攻击方式吗? 按了enter键属性页就消失了,怎么解决? 怎么从编辑框读取单个字符 我的Dialog 类向导里面没有OnInitDialog 请问怎么在C/C++下建立一个Http服务器? 简单的问题, 几个基础问题 :) 请各位大侠指教,关于树形控件的问题 请帮我编写一个函数把32位数据转换为16进制数据发送就可以了 DDK 写驱动 从linux移植到win32--无线安全利器--AirSnort-0.2.2,win32新版本发布 ##请问BT的原理分析,与实现##
HANDLE hd=CreateEvent(NULL,TRUE,FALSE,str);
if(hd==NULL)
{
Sleep(100);
hd=CreateEvent(NULL,TRUE,FALSE,str);
if(hd==NULL)
{
return JMJC_PHISICS_OVERLAPPED_EVENT_ERROR;
}
}
Overlapped.hEvent=hd;
Overlapped.Offset = 0;
Overlapped.OffsetHigh = 0;
DWORD size = 0;
if(!PurgeComm(m_hCom, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT))
{
return JMJC_PHISICS_COMCONFIGERR;
}
WriteFile(m_hCom,buf,nCount,&size,&Overlapped);
DWORD dw=GetLastError();
if(dw != 0 && dw != ERROR_IO_PENDING)
{
return JMJC_PHISICS_COMRWERR;
}
else if(dw == ERROR_IO_PENDING)
{
if(dw == WAIT_TIMEOUT)
{
return JMJC_PHISICS_COMRWERR;
}
else if(dw == WAIT_ABANDONED)
{
return JMJC_PHISICS_COMRWERR;
}
}
CloseHandle(hd);
Overlapped.hEvent = CreateEvent(NULL,TRUE,FALSE,str);
然后在关闭串口的时候再关闭事件
CloseHandle(Overlapped.hEvent);