开发USB HID的源码,调用SetupDiGetDeviceInterfaceDetail疏失
开发USB HID的源码,调用SetupDiGetDeviceInterfaceDetail出错?
调用第一次SetupDiGetDeviceInterfaceDetail出错,返回122.这没有问题.可是为何第二次调用怎么还是出现1784-提供给请求操作的用户缓冲区无效呢.
我网上查阅的大量例子,发现我的程序是没有问题的啊,请高手帮忙看一下呢
private: // User declarations
DWORD ActualBytesRead;
DWORD BytesRead;
HIDP_CAPS Capabilities;
DWORD cbBytesRead;
PSP_DEVICE_INTERFACE_DETAIL_DATA detailData;
HANDLE DeviceHandle;
DWORD dwError;
HANDLE hEventObject;
HANDLE hDevInfo;
GUID HidGuid;
OVERLAPPED HIDOverlapped;
ULONG Length;
DWORD RequiredSize; //add
LPOVERLAPPED lpOverLap;
bool MyDeviceDetected;
AnsiString MyDevicePathName;
DWORD NumberOfBytesRead;
HANDLE ReadHandle;
DWORD ReportType;
ULONG Required;
AnsiString ValueToDisplay;
HANDLE WriteHandle;
char InputReport[256];
char OutputReport[256];
boolean TUSBHID::HidUsb_Conn(int VendorID,int ProductID)
{
HIDD_ATTRIBUTES Attributes;
// DWORD DeviceUsage;
SP_DEVICE_INTERFACE_DATA devInfoData;
bool LastDevice = FALSE;
int MemberIndex = 0;
LONG Result;
char Buffer[256];
memset(Buffer,0,sizeof(Buffer));
memset(ManufacturerString,0,sizeof(ManufacturerString));
memset(ProductString,0,sizeof(ProductString));
Length = 0;
detailData = NULL;
DeviceHandle=NULL;
//获取HID GUID
HidD_GetHidGuid(&HidGuid);
//获取指定类的设备
hDevInfo=SetupDiGetClassDevs
(&HidGuid,
NULL,
NULL,
DIGCF_PRESENT|DIGCF_DEVICEINTERFACE);
devInfoData.cbSize = sizeof(devInfoData);
MemberIndex = 0;
LastDevice = FALSE;
do
{
调用第一次SetupDiGetDeviceInterfaceDetail出错,返回122.这没有问题.可是为何第二次调用怎么还是出现1784-提供给请求操作的用户缓冲区无效呢.
我网上查阅的大量例子,发现我的程序是没有问题的啊,请高手帮忙看一下呢
private: // User declarations
DWORD ActualBytesRead;
DWORD BytesRead;
HIDP_CAPS Capabilities;
DWORD cbBytesRead;
PSP_DEVICE_INTERFACE_DETAIL_DATA detailData;
HANDLE DeviceHandle;
DWORD dwError;
HANDLE hEventObject;
HANDLE hDevInfo;
GUID HidGuid;
OVERLAPPED HIDOverlapped;
ULONG Length;
DWORD RequiredSize; //add
LPOVERLAPPED lpOverLap;
bool MyDeviceDetected;
AnsiString MyDevicePathName;
DWORD NumberOfBytesRead;
HANDLE ReadHandle;
DWORD ReportType;
ULONG Required;
AnsiString ValueToDisplay;
HANDLE WriteHandle;
char InputReport[256];
char OutputReport[256];
boolean TUSBHID::HidUsb_Conn(int VendorID,int ProductID)
{
HIDD_ATTRIBUTES Attributes;
// DWORD DeviceUsage;
SP_DEVICE_INTERFACE_DATA devInfoData;
bool LastDevice = FALSE;
int MemberIndex = 0;
LONG Result;
char Buffer[256];
memset(Buffer,0,sizeof(Buffer));
memset(ManufacturerString,0,sizeof(ManufacturerString));
memset(ProductString,0,sizeof(ProductString));
Length = 0;
detailData = NULL;
DeviceHandle=NULL;
//获取HID GUID
HidD_GetHidGuid(&HidGuid);
//获取指定类的设备
hDevInfo=SetupDiGetClassDevs
(&HidGuid,
NULL,
NULL,
DIGCF_PRESENT|DIGCF_DEVICEINTERFACE);
devInfoData.cbSize = sizeof(devInfoData);
MemberIndex = 0;
LastDevice = FALSE;
do
{