我在调用SetupDiGetDeviceInterfaceDetail(https://msdn.microsoft.com/en-us/library/ff551120.aspx)时一直收到Windows错误87,即使我将所有可选参数切换为NULL,我仍然会收到错误,但我在另一个函数中使用了两个第一个参数,所以我不明白他们的错误。
HDEVINFO hdiInfo = SetupDiGetClassDevsW(&guid, NULL, NULL, 0x12);
SP_DEVICE_INTERFACE_DATA hidDevIData = SP_DEVICE_INTERFACE_DATA();
hidDevIData.cbSize = sizeof(hidDevIData);
bool isValid = SetupDiEnumDeviceInterfaces(hdiInfo, 0, &guid, i, &hidDevIData);
if (isValid)
{
DWORD dwLength;
PSP_DEVICE_INTERFACE_DETAIL_DATA hidDevIDetailData = PSP_DEVICE_INTERFACE_DETAIL_DATA();
hidDevIData.cbSize = 8;
hidDevIDetailData = new SP_DEVICE_INTERFACE_DETAIL_DATA();
hidDevIDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
SetupDiGetDeviceInterfaceDetail(hdiInfo, &hidDevIData, NULL, 0, &dwLength, NULL); //ERROR 87 : ERROR_INVALID_PARAMETER
}
我真的不知道哪个参数可能不正确,因为之前的所有函数都返回true(例如GUID有效)。
答案 0 :(得分:1)
对于那些在同一问题上挣扎的人,你只需要将cbSize放到sizeof(object):
hidDevIData.cbSize = sizeof(hidDevIData);
hidDevIDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);