当前位置:编程学习 > C#/ASP.NET >>

未将对象引用设置到对像的实例错误。。请帮下

//结构体
        public struct devDetails
        {
            public string classGuid;
            public string compatID;
            public string description;
            public string deviceClass;
            public string deviceName;
            public string driverDate;
            public string driverName;
            public string driverProviderName;
            public string driverVersion;
            public string friendlyName;
            public string hardwareID;
            public string location;
            public string manufactruer;
            public string signer;
            }

//信息获取方法
        public devDetails[] devInfoGet()
        {

            devDetails[] arr = new devDetails[100];
            int num=0;


            ManagementObjectSearcher search = new ManagementObjectSearcher("select * from Win32_PnPSignedDriver");
            try
            {
                foreach (ManagementObject share in search.Get())
                    foreach (PropertyData PC in share.Properties)
                    {
                        try
                        {
                            switch (PC.Name.ToString())
                            {
                                case "ClassGuid":
                                    arr[num].classGuid = PC.Value.ToString();
                                    break;
                                case "CompatID":
                                    arr[num].compatID = PC.Value.ToString();
                                    break;
                                case "Description":
                                    arr[num].description = PC.Value.ToString();
                                    break;
                                case "DeviceClass":
                                    arr[num].deviceClass = PC.Value.ToString();
                                    break;
                                case "DeviceName":
                                    arr[num].deviceName = PC.Value.ToString();
                                    break;
                                case "DriverDate":
                                    arr[num].driverDate = PC.Value.ToString();
                                    break;
                                case "DriverName":
                                    arr[num].driverName = PC.Value.ToString();
                                    break;
                                case "DriverProviderName":
                                    arr[num].driverProviderName = PC.Value.ToString();
                                    break;
                                case "DriverVersion":
                                    arr[num].driverName = PC.Value.ToString();
                                    break;
                                case "FriendlyName":
                                    arr[num].friendlyName = PC.Value.ToString();
                                    break;
                                case "HardwareID":
                                    arr[num].hardwareID = PC.Value.ToString();
                                    break;
                                case "Location":
                                    arr[num].location = PC.Value.ToString();
                                    break;
                                case "Manufactruer":
                                    arr[num].manufactruer = PC.Value.ToString();
                                    break;
                                case "Signer":
                                    arr[num++].signer = PC.Value.ToString();
                                    break;

                            }
                        }
                        catch(Exception exp)
                        {MessageBox.Show("Swith索引出错: \n"+exp.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);}
                    }
            }
            catch (Exception exp)
            {
                MessageBox.Show("不能找到指定的信息因为下列原因: \n "+exp.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
            
            return arr;
        } --------------------编程问答-------------------- 你的string要初始化
              public string classGuid = “”; 
            public string compatID = “”; 
            public string description = “”; 
            public string deviceClass = “”; 
            public string deviceName = “”; 
            public string driverDate = “”; 
            public string driverName = “”; 
            public string driverProviderName = “”; 
            public string driverVersion = “”; 
            public string friendlyName = “”; 
            public string hardwareID = “”; 
            public string location = “”; 
            public string manufactruer = “”; 
            public string signer = “”; 
要不然 默认是null 你再用,就是
未将对象引用设置到对像的实例 --------------------编程问答-------------------- all right --------------------编程问答-------------------- 一楼正解!
这些个问题,楼主试试插个断点跟一下程序吧! --------------------编程问答-------------------- 不同意楼上几个意见,结构体内的字符串不需要赋为空就可以使用的。
几个可疑的地方
1、ManagementObjectSearcher search = new ManagementObjectSearcher("select * from Win32_PnPSignedDriver"); //确定search不为null?
2、 foreach (ManagementObject share in search.Get()) //search.Get()是否为空?
                    foreach (PropertyData PC in share.Properties) //share.Properties是否为空

3、 case "Signer":
                 arr[num++].signer = PC.Value.ToString();//num是否越界?
还是插个断点跟踪一下吧。。。 --------------------编程问答-------------------- 断点调试一下就知道哪里没有实例了,另也赞同一楼的在设置一个变量对象最好有赋初值的习惯! --------------------编程问答-------------------- 跟踪看看问题是哪里 --------------------编程问答-------------------- 报错是哪一行啊?
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,