【发布时间】:2013-07-24 18:48:55
【问题描述】:
我正在开发一些代码以从 Windows CE5 终端运行,它将数据发送到 USB 设备(在本例中为打印机)。我在获取用于打开通信的端口的值时遇到问题。我曾尝试使用驱动程序(USBport + GUID)在注册表中写入的设备路径和许多其他变体,但都没有占上风。我知道与设备通信应该只是“打开一个文件”以在给定的内存地址与设备通信。我知道有现代的 USB 库,但这些在这么旧的操作系统上没有用(我假设)。我的总体目标是使用 VC++ 编写代码并使用 JNI 包装代码以在 Java 应用程序 (SE6) 中使用。任何人都可以举例说明示例“设备路径”可能是什么?或者,如果还有什么我想念的,请随时阐明。我注意到大多数现代 USB 库都有搜索功能,但如果我有设备路径,我不相信搜索功能是必要的....
目前我正在尝试让代码在任何操作系统上运行,并且一直在使用 Windows 7 只是为了让事情正常运行。下面是一些sn-ps的代码:
const LPCTSTR 端口值 = L"441ee000-4342-11d5-a184-00c04f60524d"; // 定义端口名,即要读取/写入的设备的位置
int usbHandle = OpenUsb(端口值); //打开文件/设备进行通信
/********这里是OpenUsb功能*************/ __declspec(dllexport) int _cdecl OpenUsb(const LPCTSTR portName) {
HANDLE activeUsbFileHandle = CreateFile(portName, //portname built in registry? need to get a WinCE5 vm going..? i belive so
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, // comm devices must be opened w/exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
FILE_ATTRIBUTE_NORMAL,
NULL);
cout << "Portname Mem Location: " << &portName;
cout << "\nThe portname passed in as: " << portName << endl;
commTimeouts.ReadIntervalTimeout = 0;
commTimeouts.ReadTotalTimeoutConstant = 500;
commTimeouts.ReadTotalTimeoutMultiplier = 0;
commTimeouts.WriteTotalTimeoutConstant = 5000;
commTimeouts.WriteTotalTimeoutMultiplier = 0;
SetCommTimeouts(activeUsbFileHandle, &commTimeouts);
return (int)activeUsbFileHandle;
}
【问题讨论】:
标签: windows usb windows-ce