2013-07-24 68 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