同一个玫举COM设备的函数,运行在两个程序里,一个有效,一个无效

发布于 2022-09-12 23:23:12 字数 2309 浏览 24 评论 0

如题,同一台电脑,同一个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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文