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
//判断串口是否已经打开
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->如果串口2打开->关闭串口2->配置串口2->如果串口3打开->关闭串口3->配置串口3
// 并不像lz说的,第一次配置串口1,第二次配置串口2
// 另:if (m_pSerial3 != NULL)就跳走了,说明串口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;
}