同一个玫举COM设备的函数,运行在两个程序里,一个有效,一个无效
如题,同一台电脑,同一个IDE(Visual Studio 2015,两个不同的c++工程)
一个工程是下载的,运行一切正常,另一个工程是自己写的,没找到COM口.
不知道是什么原因,代码如下:
程序运行的位置,
都是在WM_CREATE消息之后,前者正常,在main函数里,没加载窗体之前,AllocConsole()之后,前者都是正常找到COM口,
但我自己写的程序,无论放在什么位置,都无法找到COM口,
硬件肯定是没问题的,因为同一时间,分别试两个程序,一个正常,一个不正常
估计应该是字符集不同造成的差异,原程序是<多字节字符集>,我的程序是<unicode字符集>
如何修正差异?
BOOL FindCom(void)
{
HDEVINFO hDevInfo = INVALID_HANDLE_VALUE;
SP_DEVINFO_DATA spdata = { 0 };
GUID guid = GUID_DEVINTERFACE_COMPORT;
//empty();
hDevInfo = SetupDiGetClassDevs(&guid, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if (hDevInfo == INVALID_HANDLE_VALUE) {
cout << "hDevInfo == INVALID_HANDLE_VALUE" << endl;
return FALSE;
}
cout << "hDevInfo:" << hDevInfo << endl;
spdata.cbSize = sizeof(spdata);
for (int i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &spdata); i++) {
char buff[1024] = { 0 };
char buf[1024] = { 0 };
if (SetupDiGetDeviceRegistryProperty(hDevInfo, &spdata, SPDRP_FRIENDLYNAME, NULL,
PBYTE(buff), _countof(buff), NULL))
{
// Prolific com port (COMxx)
if (SetupDiGetDeviceRegistryProperty(hDevInfo, &spdata, SPDRP_HARDWAREID, NULL, PBYTE(buf), _countof(buf), NULL))
{
char* pid = strstr(buf, "USB\\VID_0483\&PID_5740");
//char* pid = strstr(buf, USB_ADDR);
char* p = strstr(buff, "(COM");
/*if (pid) {
cout << "pid:";
cout << pid << endl;
}*/
if (pid && p) {
//debug_out(("buf:%s\r\n", buf));
int id = atoi(p + 4);
if (p != buff) *(p - 1) = '\0';
//add(c_comport(id, buff));
//debug_out(("buf:%d,%s\r\n", id, buff));
cout << "id:" << endl;
cout << id << endl;
return TRUE;
}
}
}
}
SetupDiDestroyDeviceInfoList(hDevInfo);
return FALSE;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论