zoukankan      html  css  js  c++  java
  • VC 64位程序开发心的——获得程序位数和操作系统位数

      如今64位系统越来越流行了,对于软件开发人员来说,掌握64位开发技术将会有更好的发展空间。而且经过这几年的发展,64位开发工具也成熟了,例如Visual Studio 2010。
      关于如何配置64位平台,MSDN上有详细的介绍——
    http://msdn.microsoft.com/zh-cn/library/9yb4317s.aspx
    如何:针对 64 位平台配置 Visual C++ 项目

      在很多时候,我们希望能兼容老系统,于是配置了两个编译平台——Win32 和 x64。
      但光这样做还是不够的,因为老系统不支持某些新功能。所以我们需要在运行时动态动态判断。
      最常见的判断有两种——
    1.判断程序位数:当前程序被编译到了哪个平台。
    2.判操作系统位数:当前程序是运行在32位的操作系统上,还是64位的操作系统。

      对于第一种——判断程序位数,虽然也可以通过配置预处理符号,做编译时判定。但该方法稍微有点繁琐,而且在有些情况下不太适合——例如我想获得程序位数字符串,就必须用“#if”等语句写多行代码。
      对于第二种——判操作系统位数,那就只有在运行时判断了。

      代码如下——

    #include <Windows.h>

    #include <stdio.h>
    #include <tchar.h>
    #include <conio.h>

    // 获取程序位数(被编译为多少位的代码)
    int GetProgramBits()
    {
    return sizeof(int*) * 8;
    }

    // 安全的取得真实系统信息
    VOID SafeGetNativeSystemInfo(__out LPSYSTEM_INFO lpSystemInfo)
    {
    if (NULL==lpSystemInfo) return;
    typedef VOID (WINAPI *LPFN_GetNativeSystemInfo)(LPSYSTEM_INFO lpSystemInfo);
    LPFN_GetNativeSystemInfo fnGetNativeSystemInfo = (LPFN_GetNativeSystemInfo)GetProcAddress( GetModuleHandle(_T("kernel32")), "GetNativeSystemInfo");;
    if (NULL != fnGetNativeSystemInfo)
    {
    fnGetNativeSystemInfo(lpSystemInfo);
    }
    else
    {
    GetSystemInfo(lpSystemInfo);
    }
    }

    // 获取操作系统位数
    int GetSystemBits()
    {
    SYSTEM_INFO si;
    SafeGetNativeSystemInfo(&si);
    if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
    si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 )
    {
    return 64;
    }
    return 32;
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
    const int nBitCode = GetProgramBits();
    const int nBitSys = GetSystemBits();
    _tprintf(_T("I am a %dbit Program, run on %dbit System."), nBitCode, nBitSys);
    //
    _getch();
    return 0;
    }

      在32位winXP上的运行效果——

      在64位win7上的运行效果——

      注:
    1.GetNativeSystemInfo是Windows XP的新增API,用于取得真实系统信息。(32位程序运行在64位系统上时,GetSystemInfo返回的是经过WOW64修改后的信息)
    2.IsWow64Process用于判断某进程是否运行在WOW64下。对于64位程序,Wow64Process参数会返回FALSE。


    源码下载——
    https://files.cnblogs.com/zyl910/vcis64.rar

  • 相关阅读:
    性能优化之
    gruntjs开发实例
    从数组里随机获取N项
    调试工具-fiddler:本地资源替换线上调试
    HTML5-canvas实例:2D折线数据图与2D扇形图
    移动前端兼容性笔记
    Less开发指南(三)- 代码文件跟踪调试
    像纸质笔记本一样给div,textarea添加行的分割线
    基于视图的增删改查操作(颠覆传统思维吧)
    恶劣的百度推广人员
  • 原文地址:https://www.cnblogs.com/zyl910/p/vcis64.html
Copyright © 2011-2022 走看看