即墨进 2022-01-25 23:40 采纳率: 0%
浏览 59
已结题

C# 调用SetupDiGetDeviceInterfaceDetail第二次调用成功,结果也能拿到,但是过会一导致程序崩溃?请大佬支援!



```c#
SetupApi.SafeDeviceInfoSetHandle deviceHandle=SetupApi.SetupDiGetClassDevs(guid,"",IntPtr.Zero, SetupApi.GetClassDevsFlags.DIGCF_DEVICEINTERFACE|SetupApi.GetClassDevsFlags.DIGCF_PROFILE);
SetupApi.SP_DEVICE_INTERFACE_DATA sP_DEVICE_INTERFACE_DATA = new SetupApi.SP_DEVICE_INTERFACE_DATA();
sP_DEVICE_INTERFACE_DATA.Size = Marshal.SizeOf(sP_DEVICE_INTERFACE_DATA);
 IntPtr intptr = Marshal.AllocHGlobal(1024);
  for (int i = 0; i < 1; i++) {
           if (SetupApi.SetupDiEnumDeviceInterfaces(deviceHandle,IntPtr.Zero, ref guid,i, ref sP_DEVICE_INTERFACE_DATA)) {
                 if (!SetupApi.SetupDiGetDeviceInterfaceDetail(deviceHandle, ref sP_DEVICE_INTERFACE_DATA,IntPtr.Zero,0,intptr,IntPtr.Zero)) {
                            SetupApi.SP_DEVICE_INTERFACE_DETAIL_DATA oDevInterfaceDetailedData;
                            oDevInterfaceDetailedData.cbSize = SetupApi.SP_DEVICE_INTERFACE_DETAIL_DATA.ReportableStructSize;
                            IntPtr devInt = Marshal.AllocHGlobal(Marshal.SizeOf(oDevInterfaceDetailedData.cbSize));
                            Marshal.StructureToPtr(oDevInterfaceDetailedData,devInt,false);
                            int nRequiredSize =Marshal.ReadInt32(intptr,0);
                            Marshal.FreeHGlobal(intptr);
                        if (SetupApi.SetupDiGetDeviceInterfaceDetail(deviceHandle,ref sP_DEVICE_INTERFACE_DATA,devInt,nRequiredSize,IntPtr.Zero,IntPtr.Zero))
                            {
                                oDevInterfaceDetailedData = (SetupApi.SP_DEVICE_INTERFACE_DETAIL_DATA)Marshal.PtrToStructure(devInt,typeof(SetupApi.SP_DEVICE_INTERFACE_DETAIL_DATA));
                                //string str=new string(oDevInterfaceDetailedData.DevicePath);
                                Marshal.FreeHGlobal(devInt);
                                deviceHandle.Dispose();
                        }
                        
                        MessageBox.Show(Marshal.GetLastWin32Error().ToString());
                        }
                   
                }
               
            }

```

  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2022-01-27 10:25
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


    因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    评论

报告相同问题?

问题事件

  • 系统已结题 2月2日
  • 创建了问题 1月25日

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献