GetNativeSystemInfo http://msdn.microsoft.com/en-us/library/ms724340(VS.85).aspx肯定是要使用的功能。如果您的应用程序是本机 64 位应用程序,GetNativeSystemInfo
是相同的GetSystemInfo http://msdn.microsoft.com/en-us/library/ms724381(VS.85).aspx;否则,如果它在WOW64下运行,它将返回真实的系统属性,即使它是在模拟的32位环境中运行。
GetNativeSystemInfo
填充一个SYSTEM_INFO http://msdn.microsoft.com/en-us/library/ms724958(VS.85).aspx结构, 的wProcessorArchitecture
其中的成员告诉你系统是否是32位的(可能是PROCESSOR_ARCHITECTURE_INTEL
)或 64 位(可能PROCESSOR_ARCHITECTURE_AMD64
).
如果您的语言没有此 Win API 函数的包装器,要使用它,您可以使用LoadLibrary
and GetProcAddress
像往常一样,您需要定义SYSTEM_INFO
当然是结构。
Update
我会定义
typedef struct _SYSTEM_INFO {
WORD wProcessorArchitecture;
WORD wReserved;
DWORD dwPageSize;
LPVOID lpMinimumApplicationAddress;
LPVOID lpMaximumApplicationAddress;
DWORD_PTR dwActiveProcessorMask;
DWORD dwNumberOfProcessors;
DWORD dwProcessorType;
DWORD dwAllocationGranularity;
WORD wProcessorLevel;
WORD wProcessorRevision;
} SYSTEM_INFO;
Then wProcessorArchitecture = 0
在(通用)32 位系统上,以及wProcessorArchitecture = 9
在(通用)64 位系统上。这些只是常数PROCESSOR_ARCHITECTURE_INTEL
and PROCESSOR_ARCHITECTURE_AMD64
, 分别。这些是常见的 32 位和 64 位架构。PROCESSOR_ARCHITECTURE_IA64 = 6
稍微不常见一点,确实如此PROCESSOR_ARCHITECTURE_UNKNOWN = 65535
.
Update
是的,我看到你的问题了。在C中,union
意味着你选择one一次的选项。也就是说,该结构是
DWORD dwOemId;
DWORD dwPageSize;
LPVOID lpMinimumApplicationAddress;
LPVOID lpMaximumApplicationAddress;
DWORD_PTR dwActiveProcessorMask;
DWORD dwNumberOfProcessors;
DWORD dwProcessorType;
DWORD dwAllocationGranularity;
WORD wProcessorLevel;
WORD wProcessorRevision;
or
WORD wProcessorArchitecture;
WORD wReserved;
DWORD dwPageSize;
LPVOID lpMinimumApplicationAddress;
LPVOID lpMaximumApplicationAddress;
DWORD_PTR dwActiveProcessorMask;
DWORD dwNumberOfProcessors;
DWORD dwProcessorType;
DWORD dwAllocationGranularity;
WORD wProcessorLevel;
WORD wProcessorRevision;
由于一个 DWORD 由与两个字 (2×2) 一样多的字节 (4) 组成,因此替代方案只是对整个结构的数据进行寻址(和命名)的两种方式。就我们而言,我们更感兴趣的是wProcessorArchitecture
单词而不是增强dwOemId
of wProcessorArchitecture
以及完全无趣的wReserved
words.