IWbemClassObject :: Next возвращает типы VT_NULL, когда их нет. Что это значит? - PullRequest
1 голос
/ 27 июня 2011

Я использую Microsoft WMI для подключения к пространству имен WMI для стороннего аппаратного API. Вся инициализация работает отлично. Я установил и запустил COM и подключился к пространству имен WMI. Но когда я вызываю IWbemClassObject :: Next для перечисления членов класса, члены, являющиеся строками, возвращаются как тип VT_NULL. Следующая функция выглядит так:

HRESULT Next(
  [in]             LONG lFlags,
  [out]            BSTR *pstrName,
  [out]            VARIANT *pVal,
  [out, optional]  CIMTYPE *pvtType,
  [out, optional]  LONG *plFlavor
);

http://msdn.microsoft.com/en-us/library/aa391453(v=vs.85).aspx

VARIANT - это тип «переменной переменной», который может содержать практически любой встроенный тип C ++. Это перечислитель типа говорит VT_NULL, но в моей голове члены класса должны были быть типа BSTR. Итак, что дает? Значит ли это, что вместо этого я должен запрашивать типы с помощью WQL?

Моя цель - создавать, изменять и удалять экземпляры классов и их членов. Пространство имен WMI является проприетарным для нестандартного оборудования.

1 Ответ

2 голосов
/ 27 июня 2011

Читали ли вы комментарий к параметру pVal?

Метод вызывает VariantInit для этого VARIANT, поэтому вызывающий должен убедиться, что VARIANT не активен до вызова.

И вы прочитализамечания?

Если базовым типом свойства является путь объекта, дата или время или другой специальный тип, то возвращаемый тип не содержит достаточно информации.Вызывающая сторона должна проверить CIMTYPE на наличие указанного свойства и определить, является ли свойство ссылкой на объект, датой или временем или другим специальным типом.

Этот CIMTYPE получен черезпараметр pvtType, где в комментарии явно упоминается возможность VT_NULL:

Возможно, что значение этого свойства может быть VT_NULL VARIANT

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...