网上看了好多历程但是再VisualStadio2019 下会报警告,VS2019编译环境过于严格,因此通过查找资料进行了一定的优化!
优快云例程:
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL IsWow64()
{
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
if (NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
{
// handle error
}
}
return bIsWow64;
}
void main()
{
if(IsWow64())
printf("Running on WOW64\n");
else printf("Running on 32-bit Windows\n");
}
以上位优快云官方提供的例程,此例程能正常使用但是会报警告,作为一个严谨的有洁癖的程序开发者实在是看不下去。
优化后的代码:
BOOL IsWow64Current()
{
typedef BOOL(WINAPI* LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL bIsWow64 = FALSE;
HMODULE mGetModule = GetModuleHandle(_T("kernel32"));
if (mGetModule!=NULL)
{
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(mGetModule, "IsWow64Process");
}
else
{
printf("GetProcAddress()-> Error!\n");
return FALSE;
}
if (NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(), &bIsWow64))
{
printf("fnIsWow64Process(GetCurrentProcess()->Handle Error!\n");
}
}
return bIsWow64;
}