未将对象引用设置到对像的实例错误。。请帮下
//结构体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#