判断一个32位应用程序是否运行在x64系统下,可以使用下面的代码:

  1. BOOL IsX64System()
  2. {
  3. BOOL bIsWow64 = FALSE;
  4. typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS)(HANDLE, PBOOL);
  5. LPFN_ISWOW64PROCESS pfnIsWow64 = NULL;
  6. pfnIsWow64 = (LPFN_ISWOW64PROCESS)GetProcAddress(
  7. GetModuleHandle(_T("kernel32.dll")), "IsWow64Process");
  8. if (pfnIsWow64)
  9. {
  10. if (!pfnIsWow64(GetCurrentProcess(), &bIsWow64))
  11. {
  12. // handle error
  13. }
  14. }
  15. return bIsWow64;
  16. }

函数返回真则是运行在x64下,其实IsWow64Process是一个API,这里之所以从dll中导出来使用是因为32位系统的kernel32.dll里面是没有这个函数导出函数的,直接使用有问题。另外就是我看了几份网上的代码,写得有点小问题,很多是判断IsWow64Process的返回值来决定是否运行在x64下,这是不对的,说明下,IsWow64Process的返回值只说明函数是否成功了,要看是否运行在x64下要看这个API第二个传出参数的值。

另外就是获得处理器的架构,数量页面大小时,x64下要调用GetNativeSystemInfo,而32位系统是调用GetSystemInfo,有点点小小的区别,要注意一下,详细可以参见一下MSDN,代码在下面,GetNativeSystemInfo要导出来使用的原因同上(主要是防止意外):

  1. BOOL GetSystemInfoEx(SYSTEM_INFO *pSystemInfo)
  2. {
  3. BOOL bRet = FALSE;
  4. if (!pSystemInfo)
  5. goto Exit0;
  6. typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
  7. PGNSI pfnGNSI = NULL;
  8. ZeroMemory(pSystemInfo, sizeof(SYSTEM_INFO));
  9. if (IsX64System())
  10. {
  11. // x64下要调用这个API
  12. pfnGNSI = (PGNSI)GetProcAddress(
  13. GetModuleHandle(_T("kernel32.dll")), "GetNativeSystemInfo");
  14. if (!pfnGNSI)
  15. goto Exit0;
  16. pfnGNSI(pSystemInfo);
  17. }
  18. else
  19. {
  20. // 32位系统调用下面的API
  21. GetSystemInfo(pSystemInfo);
  22. }
  23. bRet = TRUE;
  24. Exit0:
  25. return bRet;
  26. }

可以看看我的系统o(∩_∩)o :

下次再讲讲x64下重定向的问题。

http://blog.csdn.net/magictong/article/details/5838863

最新文章

  1. 证书与keytool
  2. STDMETHOD_,STDMETHOD,__declspec(novtable)和__declspec(selectany)
  3. perl 访问网站一些useragent的设置
  4. The Swift Programming Language-官方教程精译Swift(2)基础知识
  5. 浙大pat1019题解
  6. 开源项目AndroidReview学习小结(1)
  7. 【做题】CERC2017B. Buffalo Barricades——时间倒流
  8. maya权重拷贝一对一,一对多
  9. 5.1HTML+CSS制作一颗流星
  10. [升级说明] Senparc.Weixin.MP v14.8.11 (微信群发接口调整)
  11. 新闻思考-阿里进军游戏产业,苹果发力ARM芯片
  12. oracle小记:dba_data_files
  13. 阶段01Java基础day21IO流02
  14. MIDAS.dll 出错时 (Error loading MIDAS.DLL.)
  15. 20145122《Java面向对象程序设计》实验二实验报告
  16. static关键字的内存分析
  17. java静态初始化数据
  18. OpenCV中的新函数connectedComponentsWithStats使用
  19. MySQL之查漏补缺
  20. JS监控手机或APP返回事件

热门文章

  1. 将memo转化为JPG输出,使用Memo1.PaintTo(Bitmap.Canvas)
  2. CMake 添加头文件目录,链接动态、静态库(添加子文件夹)
  3. 《Facebook效应》
  4. python栈--字符串反转,括号匹配
  5. 在.net MVC项目的区域中使用模板页
  6. WCF寄宿与IIS里时遇到的问题
  7. 深入python3 (Dive Into Python 3) 在线阅读与下载
  8. wxWidgets开始编程
  9. 第一个spring boot工程
  10. iphone开发技巧整合