I found this at Microsoft MSDN somewhere. The Code is C#, but should be easy to port to C++.
[DllImport("kernel32")] private static extern IntPtr GetModuleHandle(string lpModuleName);
[DllImport("kernel32")] private static extern int GetProcAddress(HANDLE hModule, string lpProcName);
[DllImport("kernel32")] private static extern int IsWow64Process(HANDLE hProcess, out bool Wow64Process);
public static bool Is64BitOs()
{
bool bReturnValue = false;
System.Text.StringBuilder oPath = new System.Text.StringBuilder();
oPath.Append("kernel32.dll");
IntPtr iHandle = GetModuleHandle(oPath.ToString());
int iAddress = GetProcAddress(iHandle, "IsWow64Process");
if (iAddress != 0)
{
bool bResult = false;
try
{
IsWow64Process(System.Diagnostics.Process.GetCurrentProcess().Handle, out bResult);
}
catch {}
if (bResult) bReturnValue = true;
}
return bReturnValue;
}
Studied Computer Science at the University of Stuttgart (specialized in Software Engineering and Computer Graphics), went through lots of Languages (Java, Modula, Prolog, Lisp, Basic, Smalltalk, VB, C#, C++ and even Assembler for the beloved 6502, 68000 and HP 9000 RISC), now grown up to a classic System- and Software-Architect