在写一个应用,需要和系统窗口进行通讯,所以通讯数据要兼容32位和64位系统。
以为挺简单的一件事情,直接搜索“VC判断 64位系统”,搜到很多结果,但答案很一致,好像上学时候交的作业:
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); LPFN_ISWOW64PROCESS fnIsWow64Process; BOOL IsWow64() { BOOL bIsWow64 = FALSE; //IsWow64Process is not available on all supported versions of Windows. //Use GetModuleHandle to get a handle to the DLL that contains the function //and GetProcAddress to get a pointer to the function if available. fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress( GetModuleHandle(TEXT("kernel32")),"IsWow64Process"); if(NULL != fnIsWow64Process) { if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64)) { //handle error } } return bIsWow64; }
我是想判断系统位数,咋取得一个系统函数名称里有单词process,还有个进程句柄做参数,系统属性怎么地也不能因进程不同传回不同信息吧。MSDN搜索该函数,会发现有这么一句
记得原来看到一篇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位进程。
原文:http://www.cnblogs.com/aishangxue/p/3614620.html