- 注册时间
 - 2010-7-27
 
- 最后登录
 - 2017-5-30
 
- 在线时间
 - 3 小时
 
 
 
 
 
编程入门 
  
	- 魔鬼币
 - 565 
 
 
 
 | 
 
 
   如今64位系统越来越流行了,对于软件开发人员来说,掌握64位开发技术将会有更好的发展空间。而且经过这几年的发展,64位开发工具也成熟了,例如Visual Studio 2010。 
 
     如何:针对 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;   
}   
 |   
 
 
 
 |