writefile 句柄无效

场景:dll顶用串口WriteFile发数据时GetLastError()一直为6说是句柄无效

dll中用串口WriteFile发数据时GetLastError()一直为6说是句柄无效
上代码:
HANDLE _stdcall OpenConnection(int ipt)
{
HANDLE m_hCom;
COMMTIMEOUTS TimeOuts;
DCB dcb;
    m_nBaud = 115200;
m_nDataBits = 8;
m_bEcho = FALSE;
m_bNewLine = FALSE;
m_nParity = 0;
m_sPort = "COM1";
m_nStopBits = 0;
char s[5]="";
    sprintf(s,"COM%d",ipt);
m_hCom=CreateFile(s, GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 
NULL);                                     // 重叠方式
    if(m_hCom==INVALID_HANDLE_VALUE)
return 0;
    SetupComm(m_hCom,4096,4096);
    // 把间隔超时设为最大,把总超时设为0将导致ReadFile立即返回并完成操作
TimeOuts.ReadIntervalTimeout=MAXDWORD; 
TimeOuts.ReadTotalTimeoutMultiplier=0; 
TimeOuts.ReadTotalTimeoutConstant=0; 
    /* 设置写超时以指定WriteComm成员函数中的GetOverlappedResult函数的等待时间*/
TimeOuts.WriteTotalTimeoutMultiplier=50;
TimeOuts.WriteTotalTimeoutConstant=2000;
    SetCommTimeouts(m_hCom, &TimeOuts);
    if(!GetCommState(m_hCom, &dcb))
return 0;
dcb.fBinary=TRUE;
dcb.BaudRate = m_nBaud; // 数据传输速率
  dcb.StopBits = ONESTOPBIT;//1停止位
dcb.ByteSize = m_nDataBits; // 每字节位数
    dcb.Parity = NOPARITY;                     //////////无奇偶校验
    if(!SetCommState(m_hCom, &dcb))
{
AfxMessageBox("Can not Set DCB");
return 0;
 }
   SetCommMask(m_hCom, EV_RXCHAR);
   return m_hCom;
}


void CALLBACK   CallBackFuncByFile(UINT wTimerID,UINT msg,DWORD dwUser,DWORD dw1,DWORD dw2)
{
BOOL fState;

OVERLAPPED os = {0};

//测试用例
fState=WriteFile(g_hCom,g_buf,g_dwLength,&g_dwLength,&os);
if(!fState)
{
int i  = GetLastError();//为什么返回一直是6???有的说os没有初始化,但我已经初始化了
if(GetLastError()==ERROR_IO_PENDING)
{
GetOverlappedResult(g_hCom,&m_osWrite,&g_dwLength,TRUE);// 等待
}
else
g_dwLength=0;
}
if (g_count>2)
{
timeKillEvent(m_nTimerID);
}
g_count++;
return;
}

问题在代码中,请大侠指教,谢谢

------解决方案--------------------
初妈化g_hCom = INVALID_HANDLE_VALUE

    //测试用例
if(g_hCom != INVALID_HANDLE_VALUE)
{
    fState=WriteFile(g_hCom,g_buf,g_dwLength,&g_dwLength,&os);
.........
}

还有就是是g_hCom还是m_hCom
------解决方案--------------------
建议用现成的串口操作库,或者参考这个:

http://blog.****.net/wujian53/archive/2009/04/18/4090685.aspx
------解决方案--------------------
如果你是dll的中的话,全局变量应该 


#pragma data_seg(".YourKey")
这个里面放入你的全局变量
#pragma data_seg()