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 'では、 'なぜあなたはサイズとして魔法の定数を入れたのですか?これらの2つの呼び出しで同じパラメータを使用しませんでした。 –
実行を続行する前に、SetupDiEnumDeviceInterfaces()の戻り値がtrueであることを確認したい場合があります。なんらかの理由でこの呼び出しがfalseを返した場合、hidDevIDataに無効なデータが含まれていて、SetupDiGetDeviceInterfaceDetail()に渡される可能性があります。 –
@ algirdas-preidžius両方ともに8を投げていると、エラー1784が返されます(指定されたユーザーバッファは、 )をSetupDiEnumDeviceInterfacesに設定し、sizeof(hidDevIData)を両方に配置するだけでプログラムがクラッシュします。 「myprogram.exeが停止しました」のように。 これは特定のUSBデバイス用のC#コードの適合ですので、可能な限り値を尊重しようとしています。 – sh5164