您的位置:首页 > 其它

BCB版的串口枚举2

2018-02-02 11:34 483 查看
又无意中看到 MFC实现的串口通信助手 中的一段枚举串口代码,拿过来几乎不改动就可以在bcb6.0里运行了,可是会显示个Com0 出来,断点测试原程序有个小bug,见如下:
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
BOOL bGetVer = GetVersionEx(&osvi);
if(bGetVer && (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT))
{
//Use QueryDosDevice to look for all devices of the form COMx. This is a better
//solution as it means that no ports have to be opened at all.
TCHAR szDevices[65535];
DWORD dwChars = QueryDosDevice(NULL, szDevices, 65535);
if(dwChars)
{
int i=0;
for(;;)
{
//Get the current device name
TCHAR *pszCurrentDevice = &szDevices[i];
//If it looks like "COMX" then
//add it to the array which will be returned
int nLen = _tcslen(pszCurrentDevice);
if(nLen > 3 && _tcsnicmp(pszCurrentDevice, _T("COM"), 3) == 0)
{
//Work out the port number
int nPort = _ttoi(&pszCurrentDevice[3]);
if(nPort>0)//原本这里不判断nPort会有bug,误把"CompositBarterry"匹配进来
Memo1->Lines->Add("COM"+String(nPort));
//ports.Add(nPort);
}
// Go to next NULL character
while(szDevices[i] != _T('\0'))
i++;
// Bump pointer to the next string
i++;
// The list is double-NULL terminated, so if the character is
// now NULL, we're at the end
if(szDevices[i] == _T('\0'))
break;
}
}
//else
// TRACE(_T("Failed in call to QueryDosDevice, GetLastError:%d\n"), GetLastError());
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bcb 串口 枚举