为什么以下代码在 Windows XP 中有效,但在 Windows 7 中无效?
我已连接 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这应该适用于 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.