對於C#以及Windows編程,我嘗試在Windows XP電腦上建立USB HID設備和用c#編寫的應用程序之間的通信。我已經成功地獲得該裝置的路徑和用這個以建立設備上的有效手柄:使用writefile()不能與USB HID設備成功通信
IntPtr drive = CreateFile(devicePath, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero,
OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, IntPtr.Zero);
這被證明是測試時其產生的正整數有效的句柄。在創建句柄後,我調用'HidD_GetPreparsedData'和'HidP_GetCaps',它們產生一個先前導入的結構體(HIDP_CAPS),用於存儲與所連接設備相關的特定數據。接着,我嘗試調用的WriteFile():
bool success = WriteFile(drive, ref outputReportBuffer,
caps.OutputReportByteLength, ref numberOfBytesWritten,
IntPtr.Zero);
驅動:該裝置
outputReportBuffer的手柄:字節數組寫[65]
caps.OutputReportByteLength:量要寫入的字節,瓶蓋是HIDP_CAPS
numberOfBytesWritten的結構:硬編碼爲0
IntPtr.Zero:我已閱讀一切通過這最後parame像我所做的那樣。在'writefile'的形式參數中,最後一個參數被列爲'IntPtr ipOverlapped',但我一直無法弄清楚它是什麼,除了它應該以某種形式傳遞0
WriteFile如何進口:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool WriteFile(IntPtr hFile,
ref byte[] lpBuffer,
uint nNumberOfBytesToWrite,
ref uint lpNumberOfBytesWritten,
IntPtr ipOverlapped);
當執行writefile時,它什麼也不做。我沒有遇到任何錯誤,但經過測試後,它揭示了溝通從未建立,並且沒有成功。如果任何人可以分享任何知識或提供任何資源來幫助,我會非常感激。謝謝你的閱讀。
問候。
WriteFile返回什麼?在'WriteFile'調用之後'lpNumberOfBytesWritten'包含了什麼?另外,爲什麼'lpBuffer'通過引用傳遞? – ken2k 2012-07-27 16:18:01
感謝您的快速回復。在這種情況下,WriteFile返回一個布爾值,爲false。在調用之後,寫入的numberOfBytes仍然爲0,並且從pinvoke.com獲取導入聲明。這是我第一次使用winAPI,我不知道爲什麼它通過引用傳遞 – daniel 2012-07-27 16:24:45
你試過去掉'ref'嗎? – ken2k 2012-07-27 16:31:11