void CWINCE500_TCP_CLIENTDlg::OnBnClickedButton4()
{
//打开串口1
//判断串口是否已经打开
if (m_pSerial != NULL)
{
m_pSerial->ClosePort();delete m_pSerial;
m_pSerial = NULL;
}//串口参数输入对话框
CDlgParams dlgParams;dlgParams.setCmbComNo = 0;if (dlgParams.DoModal() == IDOK)
{
//新建串口通讯对象
m_pSerial = new CCESeries();
m_pSerial->m_OnSeriesRead = OnSerialRead;//打开串口
if (m_pSerial->OpenPort(this,
dlgParams.m_portNo,
dlgParams.m_baud,
dlgParams.m_parity,
dlgParams.m_databits,
dlgParams.m_stopbits))
{
AfxMessageBox(L"串口1打开成功");
}
else
{
AfxMessageBox(L"串口1打开失败");
}
}//打开串口3
//判断串口是否已经打开
if (m_pSerial3 != NULL)
{
m_pSerial3->ClosePort();delete m_pSerial3;
m_pSerial3 = NULL;
}dlgParams.setCmbComNo = 2;if (dlgParams.DoModal() == IDOK)
{
//新建串口通讯对象
m_pSerial3 = new CCESeries();
m_pSerial3->m_OnSeriesRead = OnSerialRead2;//打开串口
if (m_pSerial3->OpenPort(this,
dlgParams.m_portNo,
dlgParams.m_baud,
dlgParams.m_parity,
dlgParams.m_databits,
dlgParams.m_stopbits))
{
AfxMessageBox(L"串口3打开成功");
}
else
{
AfxMessageBox(L"串口3打开失败");
}
}
}
上面的程序是vs2008中打开串口的程序。我设断点调试,一到if (m_pSerial3 != NULL)就跳走了。正常应该是点按钮之后弹出串口1的设置对话框,点确定后出现“设置成功”对话框,之后再点确定出现串口2对话框,但现在串口2对话框不出来了。在程序初始化的时候也没有打开过串口3,难道串口自己会打开,不用在程序中设置?求高人指点。

解决方案 »

  1.   

    // 看了程序,程序完成的功能应该是
    // 如果串口1打开->关闭串口1->配置串口1->如果串口2打开->关闭串口2->配置串口2->如果串口3打开->关闭串口3->配置串口3
    // 并不像lz说的,第一次配置串口1,第二次配置串口2
    // 另:if (m_pSerial3 != NULL)就跳走了,说明串口3没有被打开?
      

  2.   

    查一下注册表,判断一下是否有comX
      

  3.   

    //***********************
    // 枚举所有的串口,以及名称
    //***********************
    int
    EnumAllComm( TCHAR *buf )
    {
        HKEY hkey;  
        int result;
    int i = 0; *buf = 0;    result = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
    _T( "Hardware\\DeviceMap\\SerialComm" ),
    NULL,
    KEY_READ,
    &hkey ); if( ERROR_SUCCESS == result )   //   打开串口注册表   
    {   
    TCHAR portName[ 0x100 ], commName[ 0x100 ];
    DWORD dwLong, dwSize; do
    {   
    dwSize = sizeof( portName ) / sizeof( TCHAR );
    dwLong = dwSize;
    result = RegEnumValue( hkey, i, portName, &dwLong, NULL, NULL, ( LPBYTE )commName, &dwSize );
    if( ERROR_NO_MORE_ITEMS == result )
    {
    //   枚举串口
    break;   //   commName就是串口名字
    }
    _tcscpy( buf, commName );
    buf += ( _tcslen( buf ) + 1 );
    i++;   
    } while ( 1 ); RegCloseKey( hkey );   
    }   *buf = 0; return i;
    }
      

  4.   

    你该不会是m_pSerial3没初始化吧?