问题描述
- 求大神帮忙! WriteFile 写入长度只能为9 什么7啊 8啊 10啊都报错!
- 之前下资料币用完了 ! 好人全家幸福 一生平安
DevHID::DevHID(WORD vid WORD pid)
{
if (GetDevicePath(vid pid))
{
writeHandle = CreateFile(devDetail->DevicePath
GENERIC_WRITE | GENERIC_READ
FILE_SHARE_READ | FILE_SHARE_WRITE
NULL
OPEN_EXISTING
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED
NULL);if (writeHandle == INVALID_HANDLE_VALUE) { cout << ""创建写句柄失败!"" << endl; } readHandle = CreateFile(devDetail->DevicePath GENERIC_WRITE | GENERIC_READ FILE_SHARE_READ | FILE_SHARE_WRITE NULL OPEN_EXISTING FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED NULL); if (readHandle == INVALID_HANDLE_VALUE) { cout << ""创建读句柄失败!"" << endl; }}else{ cout << ""获取设备路径失败!"" << endl;}
}
BOOL DevHID::GetDevicePath(DWORD VID DWORD PID)
{
HDEVINFO hDevInfo; // 设备信息结构
GUID hidGuid; // 设备接口类ULONG requiredLength; // 指定接受缓冲区大小; // 设备句柄HANDLE hidHandle;// 用于接受VID PID_HIDD_ATTRIBUTES hidAttributes;// 获取符合条件的设备信息HidD_GetHidGuid(&hidGuid);// 获得信息hDevInfo = SetupDiGetClassDevs( &hidGuid NULL NULL (DIGCF_PRESENT | DIGCF_DEVICEINTERFACE));if (hDevInfo == INVALID_HANDLE_VALUE){ return FALSE; // 错误返回}SP_DEVICE_INTERFACE_DATA devInfoData; // 设备信息集合devInfoData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);for (int deviceNo = 0; deviceNo < 20; deviceNo++){ // 枚举设备 if (!SetupDiEnumInterfaceDevice( hDevInfo &hidGuid deviceNo &devInfoData)) { // 错误返回 SetupDiDestroyDeviceInfoList(hDevInfo); return FALSE; } // 获得缓冲区大小 SetupDiGetInterfaceDeviceDetail(hDevInfo &devInfoData NULL &requiredLength // 接受缓冲区大小 NULL); // 根据返回的信息分配缓冲区大小 devDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(requiredLength); // 指定大小 devDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA); // 填充设备路径信息缓冲区 if (!SetupDiGetInterfaceDeviceDetail(hDevInfo &devInfoData devDetail requiredLength NULL NULL)) { SetupDiDestroyDeviceInfoList(hDevInfo); free(devDetail); return FALSE; } // 打开设备 hidHandle = CreateFile(devDetail->DevicePath NULL FILE_SHARE_READ | FILE_SHARE_WRITE NULL OPEN_EXISTING FILE_ATTRIBUTE_NORMAL NULL); if (hidHandle == INVALID_HANDLE_VALUE) { // 失败 SetupDiDestroyDeviceInfoList(hDevInfo); CloseHandle(hidHandle); free(devDetail); return FALSE; } if (!HidD_GetAttributes(hidHandle &hidAttributes)) { // 获得失败 SetupDiDestroyDeviceInfoList(hDevInfo); CloseHandle(hidHandle); free(devDetail); return FALSE; } if ((VID == hidAttributes.VendorID && PID == hidAttributes.ProductID)) { // 匹配并退出 SetupDiDestroyDeviceInfoList(hDevInfo); CloseHandle(hidHandle); return TRUE; }}SetupDiDestroyDeviceInfoList(hDevInfo);CloseHandle(hidHandle);return FALSE;
}
OVERLAPPED WriteOverlapped;
WriteOverlapped.Offset = 0;
WriteOverlapped.OffsetHigh = 0;WriteOverlapped.hEvent = CreateEvent(NULL TRUE FALSE NULL);char WriteReportBuffer[64];WriteReportBuffer[0] = 0x00; WriteReportBuffer[1] = 0x10;WriteReportBuffer[2] = 0x20;WriteReportBuffer[3] = 0x30;WriteReportBuffer[4] = 0x40;WriteReportBuffer[5] = 0x30;WriteReportBuffer[6] = 0x40;WriteFile(writeHandle WriteReportBuffer NULL &WriteOverlapped);cout << ""CODE:"" << GetLastError() << endl;switch (WaitForSingleObject(WriteOverlapped.hEvent 2000)){case WAIT_OBJECT_0: cout << "" 函数返回成功!"" << endl; return;case WAIT_TIMEOUT: cout << "" 间隔时间到!"" << endl; return;case WAIT_FAILED: cout << ""WaitForSingleObject 失败!"" << endl; return;default: cout << ""什么也没有做!"" << endl;}
解决方案
你的方法调用没有问题,第三个参数表示需要将缓冲区中多少字节的数据写入问题,只要这个值不超过缓冲区的长度,应该是没有问题的。
你调用不是9时报的错误信息是什么呢?
时间: 2024-09-18 09:29:44