• 判断是否是64位系统


    背景:

    在写一个应用,需要和系统窗口进行通讯,所以通讯数据要兼容32位和64位系统。

    故事:

    以为挺简单的一件事情,直接搜索“VC判断 64位系统”,搜到很多结果,但答案很一致,好像上学时候交的作业:

     1 typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
     2 
     3 LPFN_ISWOW64PROCESS fnIsWow64Process;
     4 
     5 BOOL IsWow64()
     6 {
     7     BOOL bIsWow64 = FALSE;
     8 
     9     //IsWow64Process is not available on all supported versions of Windows.
    10     //Use GetModuleHandle to get a handle to the DLL that contains the function
    11     //and GetProcAddress to get a pointer to the function if available.
    12 
    13     fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
    14         GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
    15 
    16     if(NULL != fnIsWow64Process)
    17     {
    18         if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
    19         {
    20             //handle error
    21         }
    22     }
    23     return bIsWow64;
    24 }
    25  

    link:http://msdn.microsoft.com/en-us/library/windows/desktop/ms684139(v=vs.85).aspx

    疑问:

    我是想判断系统位数,咋取得一个系统函数名称里有单词process,还有个进程句柄做参数,系统属性怎么地也不能因进程不同传回不同信息吧。MSDN搜索该函数,会发现有这么一句

    image

    思考:

    记得原来看到一篇MSDN博客上说Wow64是Window32 On Window64的简称,所以这个函数就是判断一个进程是不是处于这样情况:32 bit Window process On 64 bit Window。

    那么为什么大家都说通过这个函数可以判断系统是否是64位呢?这个说法有一个前提,就是当前进程必须是32位进程:

    32位进程在64位系统上反回TRUE

    32位进程在32位系统上反回FALSE

    64位进程在64位系统上反回FALSE

    你会不会提出这样的疑问?文档上没有说64位进程在32位系统上返回情况;好吧,我刚开始也绕进去了,你可以重启一下大脑,32位系统无法运行64位进程。

  • 相关阅读:
    Android Media Playback 中的MediaPlayer的用法及注意事项(二)
    Android Media Playback 中的MediaPlayer的用法及注意事项(一)
    34. Search for a Range
    33. Search in Rotated Sorted Array
    32. Longest Valid Parentheses
    31. Next Permutation下一个排列
    30. Substring with Concatenation of All Words找出串联所有词的子串
    29. Divide Two Integers
    28. Implement strStr()子串匹配
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/aishangxue/p/3614620.html
Copyright © 2020-2023  润新知