Невозможно успешно установить связь с USB HID-устройством, используя writefile ()
Я довольно новичок в C #, а также в программировании Windows, и я пытаюсь установить связь между устройством USB HID и приложением, написанным на c #, на ПК с Windows XP. Я успешно получил путь к устройству и использовал его, чтобы установить действительный дескриптор на устройстве:
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: количество байтов для записи, caps - это структура HIDP_CAPS.
numberOfBytesWritten: жестко закодировано в 0
IntPtr.Zero: все, что я прочитал, передает этот последний параметр, как я сделал. В формальных параметрах «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 выполняется, он просто ничего не делает. Я не получаю ошибки, но при тестировании обнаруживается, что связь никогда не была установлена и не была успешной. Если бы кто-нибудь мог поделиться какими-либо знаниями или предоставить какие-либо ресурсы, чтобы помочь, я был бы очень признателен. Спасибо за чтение.
С уважением.