Bạn có biết tại sao khối mã dưới đây sẽ phủ nhận "Không thể chuyển đổi kiểu của loại (Null) thành loại (OleStr)" trên một số máy tính, không tất cả chúng nhưng 3 trong số mười máy tính tạo ra thông báo lỗi.Không thể chuyển đổi biến thể loại (Null) thành loại (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, Format('%s',[String(FWbemObject.Version)]));
FWbemObject:=Unassigned;
end;
end;
Chức năng sau đó sẽ được thực hiện tại FormCreate:
GETWMIstringSW('Win32_Product','Name');
Cảm ơn bạn rất nhiều vì đã giúp đỡ của bạn.
Những biến thể là null? –
Tại sao jsut không sử dụng sẵn sàng 'MagWMI' wrappers? –