0

この関数を使用してSetupDiEnumDeviceInterfaces、デバイス情報セットに含まれているデバイスインターフェイスを取得しています。ただし、GUIDは" SP_DEVICE_INTERFACE_DATA"構造体を渡していません。これが私のコードスニペットです。

を使用して問題を確認しようとしましたGetLastError。常にゼロを返します。

//GUID.
GetHidGuid(Myguid)

[DllImport("hid.dll", SetLastError = true)]
    static extern unsafe void GetHidGuid(
         ref GUID lpHidGuid);

 [StructLayout(LayoutKind.Sequential)]
    public unsafe struct GUID
    {
        public int Data1;
        public System.UInt16 Data2;
        public System.UInt16 Data3;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
        public byte[] data4;
    }

// SetupDiEnumDeviceInterfaces function.

public unsafe int CT_SetupDiEnumDeviceInterfaces(int memberIndex)
    {
        int ErrorStatus;
        mySP_DEVICE_INTERFACE_DATA = new SP_DEVICE_INTERFACE_DATA();--> here is where i Have problem.GUID is zero.

        mySP_DEVICE_INTERFACE_DATA.cbSize = Marshal.SizeOf(mySP_DEVICE_INTERFACE_DATA);
        int result = SetupDiEnumDeviceInterfaces(
            hDevInfo,
            0,
            ref  MYguid,
            memberIndex,
            ref mySP_DEVICE_INTERFACE_DATA);
        return result;
        ErrorStatus = System.Runtime.InteropServices.Marshal.GetLastWin32Error();
    }

    public unsafe struct SP_DEVICE_INTERFACE_DATA
    {
        public int cbSize;
        public GUID InterfaceClassGuid;
        public int Flags;
        public int Reserved;
    }

どんな助けでも大歓迎です。事前に感謝します。

4

1 に答える 1

1

pInvokeから、次のように宣言するGetHidGuid必要があるようです

[DllImport("hid.dll", EntryPoint="HidD_GetHidGuid", SetLastError=true)]
static extern void HidD_GetHidGuid(out Guid hidGuid);

別の完全な例はこちら

于 2012-09-25T15:56:28.213 に答える