2
SetupDiGetDeviceInterfaceDetail (https://msdn.microsoft.com/en-us/library/ff551120.aspx)을 호출하는 동안 Windows 오류 87이 계속 발생하면서 모든 선택적 매개 변수를 NULL로 전환해도 오류가 계속 발생하지만 두 개의 첫 번째 매개 변수를 사용합니다. 작동하는 또 다른 함수, 그래서 나는 그들에 대해 잘못된 것을 이해하지 못한다.오류 87, SetupDiGetDeviceInterfaceDetail의 잘못된 매개 변수
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는 예를 들어 유효). 같은 문제로 어려움을 겪고 사람들을 위해
을'hidDevIData.cbSize = 8;'왜 크기로 마법 상수를 넣어 않았다? 두 번의 호출에서 동일한 매개 변수를 사용하지 않았습니다. –
실행을 계속하기 전에 SetupDiEnumDeviceInterfaces()의 반환 값이 true인지 확인하는 것이 좋습니다. 어떤 이유로이 호출이 false를 반환하면 hidDevIData에 잘못된 데이터가 포함되어 SetupDiGetDeviceInterfaceDetail()에 전달 될 수 있습니다. –
@ algirdas-preidžius 두 가지 모두에서 8을 쓰면 오류 1784가 발생합니다 (제공된 사용자 버퍼가 요청한 작업에 유효하지 않습니다.)를 SetupDiEnumDeviceInterfaces로 설정하고 sizeof (hidDevIData)를 둘 다에두면 프로그램이 중단됩니다. "myprogram.exe가 막 중단되었습니다"와 같습니다. 플러스 이것은 특정 USB 장치에 대한 C# 코드의 적용이므로 가능한 한 많은 값을 존중합니다. – sh5164