delphi – 无法将类型(Null)的变体转换为类型(OleStr)
发布时间:2020-12-15 04:14:58 所属栏目:大数据 来源:网络整理
导读:你知道为什么下面的代码块会在某些计算机上否定“无法将类型(Null)的变量转换为类型(OleStr)”,而不是全部,但是十分之三的计算机会生成错误消息. function GetWMIstringSW(const WMIClass,WMIProperty:string): string;const wbemFlagForwardOnly = $0000002
你知道为什么下面的代码块会在某些计算机上否定“无法将类型(Null)的变量转换为类型(OleStr)”,而不是全部,但是十分之三的计算机会生成错误消息.
function GetWMIstringSW(const WMIClass,WMIProperty:string): string; const wbemFlagForwardOnly = $00000020; var FWbemObjectSet: OLEVariant; FWbemObject : OLEVariant; oEnum : IEnumvariant; iValue : LongWord; LNode : TTreeNode; LNode2 : TTreeNode; begin Result:=''; FWbemObjectSet:= FWMIService.ExecQuery(Format('Select %s from %s',[WMIProperty,WMIClass]),'WQL',wbemFlagForwardOnly); oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant; while oEnum.Next(1,FWbemObject,iValue) = 0 do begin if not VarIsNull(FWbemObject.Properties_.Item(WMIProperty).Value) then Result:=FWbemObject.Properties_.Item(WMIProperty).Value; LNode := ClientForm.TreeView1.Items.AddChild(Node,Format('%s',[String(FWbemObject.Name)])); LNode2 := ClientForm.TreeView1.Items.AddChild(LNode,[String(FWbemObject.Version)])); FWbemObject:=Unassigned; end; end; 然后在FormCreate中执行该函数: GETWMIstringSW('Win32_Product','Name'); 非常感谢你的帮助. 解决方法
当WMI属性的值返回null时,您的代码将失败.您可以解决此问题,在转换或转换为字符串之前检查属性是否具有空值.对于此任务,您可以使用
VarIsNull 函数或仅使用
VarToStr 方法将变量安全地转换为字符串,如此.
LNode := ClientForm.TreeView1.Items.AddChild(Node,[VarToStr(FWbemObject.Name)])); LNode2 := ClientForm.TreeView1.Items.AddChild(LNode,[VarToStr(FWbemObject.Version)])); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |