我正在开发一些代码,用于从Windows CE5终端运行,该终端将数据发送到USB设备(在本例中为打印机)。我在获取用于打开通信的端口的值时遇到问题。我试图使用驱动程序在注册表中编写的设备路径(USBport + GUID)和许多其他变体没有占上风。我知道与设备通信应该只是“打开一个文件”与设备在给定的内存地址进行通信。我知道有现代的usb库,但是对于这样一个旧的操作系统(我假设)它们没用。我的总体目标是编写代码是VC ++并使用JNI来包装代码以便在Java应用程序(SE6)中使用。任何人都可以举例说明样本“设备路径”可能是什么?或者,如果还有其他我想念的东西,请随意光明。我注意到大多数现代USB库都有搜索功能,但如果我有设备路径,我不相信搜索功能是必要的....
目前我正在尝试让代码在任何操作系统上运行,并且一直在使用Windows 7来使事情正常运行。以下是一些代码段:
const LPCTSTR portvalue = L“441ee000-4342-11d5-a184-00c04f60524d”; //定义端口名,即读/写设备的位置
int usbHandle = OpenUsb(portvalue); //打开文件/设备进行通信
/ * ** * ** * * 以下是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;
}
答案 0 :(得分:1)
portName = "\\LPT1:"; /* i use this for printing */