windows从xp开始,有了64位操作系统。如何判断操作系统是32位还是64位,相信有很多方法。网上有种方法是通过Wow来判断,不过还有点问题,我修复了一下。
HRESULT Is64BitSystem(BOOL& bIs64Sys)
{
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
bIs64Sys=FALSE;
HRESULT hr=E_FAIL;
do{
HMODULE hModule=::GetModuleHandleW(L"kernel32.dll");
if(hModule==NULL) break;
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(hModule, "IsWow64Process");
if(NULL==fnIsWow64Process) break;
if(!fnIsWow64Process(GetCurrentProcess(),&bIsWow64)) break;
if(bIsWow64){
bIs64Sys=TRUE;
}else{// maybe 64bit program run in 64 bit system.
DWORD_PTR dw=0;
if(sizeof(dw)==8) bIs64Sys=TRUE;
}
hr=S_OK;
}while(FALSE);
return hr;
}