zyl910

优化技巧、硬件体系、图像处理、图形学、游戏编程、国际化与文本信息处理。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  215 随笔 :: 0 文章 :: 145 评论 :: 111万 阅读
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

  如今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

posted on   zyl910  阅读(8414)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示