我正在开发一些代码从Windows CE5终端,将数据发送到USB设备(在这种情况下,打印机)运行。我有问题获得用于开放通信的端口的价值。我曾尝试使用由驱动程序(USBport + GUID)在注册表中写入的设备路径以及许多其他变体。我知道与设备通信应该只是“打开文件”,以便在给定内存地址与设备进行通信。我知道有一些现代化的usb库,但这些在旧的操作系统上是没用的(我假设)。我的总体目标是编写代码为VC++,并使用JNI封装用于Java应用程序(SE6)的代码。任何人都可以举一个例子来说明“设备路径”可能是什么样的?或者如果还有其他东西我失踪,可以随意摆脱灯光。我注意到大多数的现代USB库都有搜索功能,但是如果我有设备路径,我不相信搜索功能是必要的......USB通信 - Windows CE主机终端到USB设备(打印机)
目前我正试图让代码工作在任何操作系统上,并且一直在使用Windows 7才能正常工作。以下是一些代码片段:
const LPCTSTR portvalue = L“441ee000-4342-11d5-a184-00c04f60524d”; //定义端口名,即要读取/写入的设备的位置
int usbHandle = OpenUsb(portvalue); //打开文件/设备进行通信
/* ** * ** * *这里是OpenUsb功能 ** * ** * ** * ****/ __declspec(dllexport)的INT _cdecl OpenUsb(常量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;
}
OMFG,它就是这么简单!我一直在阅读这么多的在线文章,其荒谬的地方在那里有多少种可能性。我看到使用GUID + USB#yada yada yada组合的直接连接。并不是说它完全工作,但我现在看到一个有效的句柄值返回,所以非常感谢! :P我会继续根据我的进度编辑这篇文章。 – new2usb