加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在C上检测Windows 32或64位?

发布时间:2020-12-16 10:34:40 所属栏目:百科 来源:网络整理
导读:如何在C上检测 Windows 32或64位? 我在.Net中看到了很多例子,但我需要C. IsWow64Process()也不适用于我,因为“如果进程在32位Windows下运行,则该值设置为FALSE.如果进程是在64位Windows下运行的64位应用程序,则值为也设为FALSE“ 如果我在32位操作系统下有3
如何在C上检测 Windows 32或64位?
我在.Net中看到了很多例子,但我需要C. IsWow64Process()也不适用于我,因为“如果进程在32位Windows下运行,则该值设置为FALSE.如果进程是在64位Windows下运行的64位应用程序,则值为也设为FALSE“

如果我在32位操作系统下有32位进程,那我就错了
如果我在64位操作系统下有64位proc,那我就错了

但我不关心过程位我需要OS位

解决方法

用于检测有关底层系统的信息的Win32 API函数是 GetNativeSystemInfo.调用该函数并读取函数填充的 SYSTEM_INFO结构的wProcessorArchitecture成员.

虽然实际上可以使用IsWow64Process来检测这一点.如果调用IsWow64Process并返回TRUE,则表示您正在64位系统上运行.否则,返回FALSE.然后你只需要测试一个指针的大小. 32位指针表示32位系统,64位指针表示64位系统.实际上,您可以从编译器提供的条件中获取信息,具体取决于您使用的编译器,因为指针的大小在编译时是已知的.

Raymond Chen在blog article中描述了这种方法.他帮助我提供了代码,我在这里重现:

BOOL Is64BitWindows()
{
#if defined(_WIN64)
 return TRUE;  // 64-bit programs run only on Win64
#elif defined(_WIN32)
 // 32-bit programs run on both 32-bit and 64-bit Windows
 // so must sniff
 BOOL f64 = FALSE;
 return IsWow64Process(GetCurrentProcess(),&f64) && f64;
#else
 return FALSE; // Win64 does not support Win16
#endif
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读