IWbemClassObject :: Next会产生VT_NULL类型。这是什么意思?

时间:2011-06-27 12:31:13

标签: c++ wmi

我正在使用Microsoft WMI连接到第三方硬件API的WMI名称空间。 所有的初始化工作正常。我启动并运行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 个答案:

答案 0 :(得分:2)

您是否阅读了pVal参数的评论?

  

该方法在此调用VariantInit   VARIANT,所以来电者应该确保   之前VARIANT不活跃   致电。

你读过这些评论吗?

  

如果属性的基础类型   是对象路径,日期或时间,或   另一种特殊类型,然后是   返回的类型不够用   信息。来电者必须检查   指定的CIMTYPE   财产,并确定是否   property是一个对象引用,date   或时间,或其他特殊类型。

通过pvtType参数获取CIMTYPE,其中评论明确提到VT_NULL可能性:

  

这可能是这个的价值   属性可以是VT_NULL VARIANT