DWORD CComm::WriteComm(LPCVOID lpBuf, DWORD dwWrite)
{
if( m_hCom == NULL ) return 0;
DWORD dwWritten=0;
COMSTAT ComStat;
DWORD dwErrorFlags;
ClearCommError(m_hCom,&dwErrorFlags,&ComStat);
WriteFile(m_hCom, lpBuf, dwWrite, &dwWritten, NULL);
int r=GetLastError();
return dwWritten;
}r返回错误87 参数错误单步至此参数如下
lpBuf 0x0012fe34
dwWrite 1
dwWritten 0
m_hCom 0x00000730调用来自packet BYTE类型
if(m_com.WriteComm(packet,1)==0) MessageBox("错误");

解决方案 »

  1.   

    调用 的参数 packet BYTE类型是不是应该强制转化为 LPCVOID lpBuf   查看一下 LPCVOID 到底需要什么样类型!我只是猜测。串口操作也可以换个其它类,试试。
      

  2.   

    写串口的时候需要加一个OVERLAPPED参数吧
    我是这么用的
    你可以参考一下
    int CWEComm::Write(char *pBuf, int nLen)
    {
    if(!IsOpen() || !pBuf)
    return 0; DWORD dwError;
    OVERLAPPED olWirte;
    unsigned long ulWLen = 0; if(ClearCommError(m_hComm, &dwError, NULL) && dwError > 0)
    PurgeComm(m_hComm, PURGE_TXABORT | PURGE_TXCLEAR); memset(&olWirte, 0, sizeof(olWirte));
    olWirte.hEvent = CreateEvent(NULL, true, false, NULL);
    if(olWirte.hEvent == INVALID_HANDLE_VALUE)
    return NULL;
    if(!WriteFile(m_hComm, pBuf, nLen, &ulWLen, &olWirte))
    {
    if(GetLastError()!=ERROR_IO_PENDING)
    ulWLen = 0;
    }
    CloseHandle(olWirte.hEvent); return ulWLen;
    }
      

  3.   

    如果有闪烁, 处理一下 WM_ERASEBKGND 消息, 直接返回TRUEON_WM_ERASEBKGND()BOOL CXXXXXDlg::OnEraseBkgnd(CDC* pDC)  
    {
      return TRUE;
    }
      

  4.   

    谢谢各位,我自己重做了个OnPaint,现在没闪烁了