Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Чудеса Wmi

7.9K
18 октября 2004 года
egn_victor
6 / / 18.10.2004
Работаю с WMI. Программа корректно работает с классами win32_processor, win32_baseboard, win32_PhysicalMemory. при обращении к классам win32_BIOS, Win32_ComputerSystem, Win32_DiskDrive выдает ошибку Invalid variant operation. Помогите! Выкладываю листинг.
var
Service: ISWbemServices;
ObjectSet: ISWbemObjectSet;
SObject: ISWbemObject;
PropSet: ISWbemPropertySet;
SProp: ISWbemProperty;
PropEnum, Enum: IEnumVariant;
TempObj: OleVariant;
Value: Cardinal;
StrValue: string;
begin
Service:= SWbemLocator1.ConnectServer('.', 'root\CIMV2', '', '', '',
'', 0, nil);
SObject:= Service.Get('Win32_Processor', wbemFlagUseAmendedQualifiers, nil);
ObjectSet:= SObject.Instances_(0, nil);
Enum:= (ObjectSet._NewEnum) as IEnumVariant;
Enum.Next(1, TempObj, Value);
SObject:= IUnknown(TempObj) as SWBemObject;
PropSet := SObject.Properties_;
PropEnum := (PropSet._NewEnum) as IEnumVariant;
while (PropEnum.Next(1, TempObj, Value) = S_OK) do
begin
SProp:= IUnknown(TempObj) as SWBemProperty;
StrValue:= '';
if (SProp.Get_Value <> null) then
begin
with SProp do
begin
if Name = 'Name' then
Label2.Caption:= Get_Value
else if Name = 'Manufacturer' then
Label4.Caption:= Get_Value
end
end;
end;
end;
2.4K
19 октября 2004 года
Russtam
33 / / 26.07.2003
А в каком месте ругается?
7.9K
19 октября 2004 года
egn_victor
6 / / 18.10.2004
if (SProp.Get_Value <> null)
10
19 октября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by egn_victor
if (SProp.Get_Value <> null)


Так нельзя же вроде так писать. Надо бы:
if not VarIsNull(SProp.Get_Value)

2.4K
19 октября 2004 года
Russtam
33 / / 26.07.2003
Цитата:
Originally posted by egn_victor
if (SProp.Get_Value <> null)



Попробуй этот кусок внутри while (PropEnum.Next(1, TempObj, Value) = S_OK) do

в try except взять, там возможно пропертя "вредная попадается, если другие получишь - бага в конвертации.
А какого типа .Get_Value ? (у меня просто доков нет)

2.4K
19 октября 2004 года
Russtam
33 / / 26.07.2003
Цитата:
Originally posted by smartsoft

Так нельзя же вроде так писать. Надо бы:
if not VarIsNull(SProp.Get_Value)



Дык там видать не Variant возвращается, Variant делфя вообще не дает с nil сравнивать. (Хотя попробовать можно, хуже точно не будет :))

Может Get_Value строкой возвращает значение?

7.9K
19 октября 2004 года
egn_victor
6 / / 18.10.2004
Всем большое спасибо. Помогло: if not VarIsNull(SProp.Get_Value)
10
19 октября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by egn_victor
Всем большое спасибо. Помогло: if not VarIsNull(SProp.Get_Value)


Дык это еще со времен баз данных идет. Значение NULL нельзя сравнивать ни с каким значением, в том числе и NULL. В вариантах - аналогично.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог