如何访问 VARIANT 结构中的 uint64?

问题描述 投票:0回答:1

如何访问

uint64
结构中的
VARIANT

例如:

VARIANT vtProp{};
hres = pclsObj->Get(L"FreeSpaceInPagingFiles", 0, &vtProp, 0, 0);
strSystemInfo.AppendFormat(L"  Free Space In Paging Files: %d\r\n", vtProp.iVal);

这些是来自

Win32_ComputerSystem
类的属性。


我不明白为什么我得到:

Total Virtual Memory Size: 1860884006920
Total Visible Memory Size: 1860884006920

使用此代码:

hres = pclsObj->Get(L"TotalVirtualMemorySize", 0, &vtProp, 0, 0);
strSystemInfo.AppendFormat(L"  Total Virtual Memory Size: %lld\r\n", vtProp.ullVal);
VariantClear(&vtProp);

hres = pclsObj->Get(L"TotalVisibleMemorySize", 0, &vtProp, 0, 0);
strSystemInfo.AppendFormat(L"  Total Visible Memory Size: %lld\r\n", vtProp.ullVal);
VariantClear(&vtProp);

但是 PowerShell:

Get-WmiObject -Class "Win32_operatingsystem" | Format-List *

报告:

TotalVirtualMemorySize                    : 35567932
TotalVisibleMemorySize                    : 33470780

我做错了什么?

例如,对于

Win32_ComputerSystem.TotalPhysicalMemory
,文档说:

TotalPhysicalMemory

数据类型:

uint64

访问类型:只读

限定符:MappingStrings(“Win32API |内存管理结构|MEMORYSTATUS | dwTotalPhys”),单位(“字节”)

物理内存的总大小。请注意,在某些情况下,此属性可能不会返回物理内存的准确值。例如,如果 BIOS 正在使用某些物理内存,则它是不准确的。要获得准确的值,请改用

Win32_PhysicalMemory
中的容量属性。

示例:67108864

有关在脚本中使用

uint64
值的更多信息,请参阅 WMI 中的脚本编写

说实话,当我很难正确解释

VARIANT
对象数据时,使用哪种内存值属性并不重要。

visual-c++ wmi variant uint64
1个回答
0
投票

我有部分答案:

bstrVal
中的值是正确的。

所以,拿

Capacity
,我得到:

Total Physical Memory: 17179869184
Total Physical Memory: 17179869184

值与 PowerShell 匹配:

Capacity             : 17179869184

我有2家银行,所以总数是

34359738368
。这类似于
Win32_ComputerSystem.TotalPhysicalMemory
->
Installed RAM: 34274078720

简短的回答是,我可以使用

bstrVal
来获取 PowerShell 显示的实际值。但我如何将
bstrVal
转换为合适的 GB 值则是另一回事了。

© www.soinside.com 2019 - 2024. All rights reserved.