为什么以下代码在 Windows XP 中有效,但在 Windows 7 中无效?

发布于 2024-10-07 20:16:31 字数 737 浏览 2 评论 0原文

我已连接 USB 打印机,并且尝试使用 CFile 类的 Open 方法打开该端口。 以下代码在 Windows XP 中工作正常,但在 Windows 7 中不起作用:

#include<stdio.h>
#include<afx.h>
void main()
{
    CFile m_Port;
    CString PortName = "\\\\?\\usb#vid_0b0b&pid_106e#sx0000000-tc0000#{28d78fad-5a12-11d1-ae5b-0000f803a8c2}";
    int i;
    i = m_Port.Open (PortName ,2,0);//PortName is DevicePath
    if ( i > 0 )
        printf("Done");
    else
        printf("Its not working");

    i=GetLastError();
    printf("\n\nError=%d",i);
}

在 Windows XP 中工作正常,但在 Windows 7 中,GetLastError 返回值 3。我怎样才能修复此代码以在 Windows XP 和 Windows 7 上运行? 让我知道它们在 Windows 7 中是否有任何不同的 GUID。它们是否还有其他选项可以在 Windows 7 中使用设备路径打开端口?

I have connected a USB printer, and I am trying to open that port using Open method of CFile class.
The following code works properly in Windows XP, but it does not work in Windows 7:

#include<stdio.h>
#include<afx.h>
void main()
{
    CFile m_Port;
    CString PortName = "\\\\?\\usb#vid_0b0b&pid_106e#sx0000000-tc0000#{28d78fad-5a12-11d1-ae5b-0000f803a8c2}";
    int i;
    i = m_Port.Open (PortName ,2,0);//PortName is DevicePath
    if ( i > 0 )
        printf("Done");
    else
        printf("Its not working");

    i=GetLastError();
    printf("\n\nError=%d",i);
}

In Windows XP it works properly, but in the case of Windows 7, GetLastError returns a value of 3. How can I fix this code to work on both Windows XP and Windows 7?
Let me know if their are any different GUID in windows 7. Are their any other option to open port using device path in windows 7?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

み格子的夏天 2024-10-14 20:16:31

这应该适用于 Windows 7,但也许您必须提升运行该应用程序。
我猜,路径是错误的(这就是错误 3 所说的)。
打开设备管理器,在上下文菜单中选择设备和“属性”。然后是“详细信息”和“硬件 ID”。
您在这里找到代码示例的路径吗?如果没有,请相应地更改您的代码。

另外:对于这种接近系统的编程,我将使用 WIN-API 中的 ::CreateFile 而不是 CFile 类。

This should work with Windows 7, but perhaps you have to run the application elevated.
I guess, the path is wrong (and this is what error 3 says).
Open the device manager, select the device and "Properties" in the context menu. Then "Details" and there "Hardware IDs".
Do you find the path from your code sample here? If not, change your code accordingly.

Also: For this kind of system-near programming I would use ::CreateFile from WIN-API and not CFile class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文