请问一下,我通过读注册表获得可使用的COM口,想放到下拉列表里,但是出来的却是乱码。

chenggang__ 2014-03-24 01:19:39
MFC中读注册表,获得COM数目,并在下拉列表中显示,但是出来的却是乱码。
软件环境:WIN7 x64,Vs2010
void FindCommPort(CComboBox *m_ComId1)
{
HKEY hKey;
#ifdef _DEBUG
ASSERT(m_ComId1 != NULL);
m_ComId1->AssertValid();
#endif
if(::RegOpenKeyExA(HKEY_LOCAL_MACHINE,"Hardware\\DeviceMap\\SerialComm",NULL,KEY_READ,&hKey)==ERROR_SUCCESS)
{
int i=0;
char portName[256],commName[256];
DWORD dwlong,dwSize;
while(1)
{
dwlong = dwSize =sizeof(portName)/sizeof(PUCHAR);
if(::RegEnumValueA(hKey,i,portName,&dwlong,NULL,NULL,(PUCHAR)commName,&dwSize)==ERROR_NO_MORE_ITEMS)
break;
m_ComId1->AddString(LPCTSTR(commName));
i++;
}
if(i==0)
{
::AfxMessageBox(_T("没有可用的COM口"));
}
RegCloseKey(hKey);
}
}
...全文
114 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
movsd 2014-03-24
  • 打赏
  • 举报
回复
RegOpenKeyExA RegEnumValueA 一般不要直接使用带A或W的函数,让编译器跟据编译环境自动选择。
赵4老师 2014-03-24
  • 打赏
  • 举报
回复
编译选项设置为”使用多字节字符集“试试。
chenggang__ 2014-03-24
  • 打赏
  • 举报
回复
m_ComId1->AddString(LPCTSTR(commName)); 这是我添加找到的端口的,但是不理解为什么啊?烦请各位劳神,不吝赐教啊!
赵4老师 2014-03-24
  • 打赏
  • 举报
回复
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧