2013-07-24 67 views
1

我正在开发一些代码从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; 

}

回答

1
portName = "\\LPT1:"; /* i use this for printing */    
+0

OMFG,它就是这么简单!我一直在阅读这么多的在线文章,其荒谬的地方在那里有多少种可能性。我看到使用GUID + USB#yada yada yada组合的直接连接。并不是说它完全工作,但我现在看到一个有效的句柄值返回,所以非常感谢! :P我会继续根据我的进度编辑这篇文章。 – new2usb