我正在开发一些代码以从 Windows CE5 终端运行,它将数据发送到 USB 设备(在本例中为打印机)。我在获取用于打开通信的端口值时遇到问题。我曾尝试使用驱动程序(USBport + GUID)在注册表中写入的设备路径和许多其他变体,但都没有占上风。我知道与设备通信应该只是“打开一个文件”以在给定的内存地址与设备通信。我知道有现代的 USB 库,但这些在这么旧的操作系统上没有用(我假设)。我的总体目标是使用 VC++ 编写代码并使用 JNI 包装代码以在 Java 应用程序 (SE6) 中使用。任何人都可以举例说明示例“设备路径”可能是什么?或者,如果还有什么我想念的,请随时阐明。
目前我正试图让代码在任何操作系统上运行,并且一直在使用 Windows 7 来让事情正常运行。下面是一些代码片段:
常量 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;
}