gpt4 book ai didi

delphi - 无法将类型 (Null) 的变体转换为类型 (OleStr)

转载 作者:行者123 更新时间:2023-12-03 14:56:18 29 4
gpt4 key购买 nike

你知道为什么下面的代码块会在某些计算机上否定“无法将类型(Null)的变体转换为类型(OleStr)”吗?不是所有计算机,而是十分之三的计算机会生成错误消息。

enter image description here

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, Format('%s',[String(FWbemObject.Version)]));
FWbemObject:=Unassigned;
end;

end;

然后该函数在 FormCreate 中执行:

GETWMIstringSW('Win32_Product','Name');

非常感谢您的帮助。

最佳答案

当 WMI 属性的值返回 null 时,您的代码将失败。您可以修复此问题,在强制转换或转换为字符串之前检查属性是否为空值。对于此任务,您可以使用 VarIsNull函数或仅使用 VarToStr像这样安全地将变体转换为字符串的方法。

 LNode := ClientForm.TreeView1.Items.AddChild(Node, 
Format('%s',[VarToStr(FWbemObject.Name)]));
LNode2 := ClientForm.TreeView1.Items.AddChild(LNode,
Format('%s',[VarToStr(FWbemObject.Version)]));

关于delphi - 无法将类型 (Null) 的变体转换为类型 (OleStr),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16224959/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com