异步方式实现串口通信,为什么小弟我的程序写串口失败?

异步方式实现串口通信,为什么我的程序写串口失败???
我想通过上位机以异步方式向下位机发送数据,现在异步打开串口没有问题,但是写串口失败,程序如下,大侠帮忙看看哪有问题,在此表示感谢!!!
//////********异步打开串口代码**********/////////
HANDLE hcom;
hcom=CreateFile("COM6",GENERIC_READ|GENERIC_WRITE, 0, NULL ,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
if (hcom==INVALID_HANDLE_VALUE)
{
AfxMessageBox("打开COM6失败");
return;
}
else
{
AfxMessageBox(_T("打开串口成功"));
DCB dcb;
GetCommState (hcom,&dcb);
dcb.BaudRate=9600; //波特率为9600
dcb.ByteSize=8; //每个字节有8位
dcb.Parity=NOPARITY; //无奇偶校验位
dcb.StopBits=TWOSTOPBITS; //两个停止位
SetCommState (hcom,&dcb);
PurgeComm(hcom,PURGE_TXCLEAR|PURGE_RXCLEAR);
SetupComm(hcom,1024,1024);
}
/////////////*********写串口代码***********/////////////////
const int n=8;

char buffer[n];
char lpOutBuffer[n];

DWORD dwBytesWrite=n;
COMSTAT ComStat;
DWORD dwErrorFlags;
OVERLAPPED m_osWrite;
BOOL bWriteStat;

int x=249;////向下发送8个249作为测试

char x1;
x1=(char)x;

lpOutBuffer[0]=x1;
lpOutBuffer[1]=x1;
lpOutBuffer[2]=x1;
lpOutBuffer[3]=x1;
lpOutBuffer[4]=x1;
lpOutBuffer[5]=x1;
lpOutBuffer[6]=x1;
lpOutBuffer[7]=x1;

ClearCommError(hcom,&dwErrorFlags,&ComStat);
bWriteStat=WriteFile(hcom,lpOutBuffer,dwBytesWrite,&dwBytesWrite,&m_osWrite);
if(!bWriteStat)
{
if(GetLastError()==ERROR_IO_PENDING)
{
WaitForSingleObject(m_osWrite.hEvent,2000);//等待2秒
PurgeComm(hcom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
return;
}
else
{
AfxMessageBox(_T("写串口失败"));
PurgeComm(hcom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
return;
}
}
PurgeComm(hcom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
CloseHandle(hcom);

------解决方案--------------------
m_osWrite.....请在此事件上等待 WaitForSingleEvent()
------解决方案--------------------
FILE_ATTRIBUTE_NORMAL
------解决方案--------------------
你为什么不用命令行的方式去做呢?
把数据放到一个临时文件中,然后调用命令行去发送到串口,我之前就是这样做的