判断是否是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位进程。

posted @ 2014-03-20 21:05  ssp1024  阅读(585)  评论(0编辑  收藏  举报