0

我知道 64 位应用程序需要 64 位 Windows。

哪个 c/c++ 代码仅适用于 64 位或 32 位?编辑:我在这里找到了

我可以在运行时确定进程字长吗:就像我将有 32 位应用程序一样,如果操作系统是 32 位或 64 位,它会返回,然后以正确的字长运行子/新进程。

4

2 回答 2

3

您可以通过GetNativeSystemInfo. 例如,您可以执行以下操作:

typedef void (WINAPI *GetNativeSystemInfo_t)(LPSYSTEM_INFO lpSystemInfo);

BOOL IsSystem64Bit()
{
    HANDLE kernel32 = LoadLibrary("kernel32.dll");
    SYSTEM_INFO si;

    GetNativeSystemInfo_t GetNativeSystemInfoPtr
        = (GetNativeSystemInfo_t)GetProcAddress(kernel32, "GetNativeSystemInfo");

    if (GetNativeSystemInfoPtr == NULL)
        return FALSE;

    GetNativeSystemInfoPtr(&si);
    return (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64);
}

该函数被动态解析的原因是它在 XP 之前的 Windows 版本中不存在。(而且在那些版本的 windows 上,我们已经知道系统不是 64 位的)

于 2013-03-22T19:21:04.913 回答
-1

我不确定 Windows,因此显然这将在帮助方面受到限制,但在 Linux 上,您可以在运行时确定字长。long int 将是字长。在 64 位 Linux 上,long 是 64 位,在 32 位 Linux 上是 32 位。

所以,这看起来真的很愚蠢和不一致,但你可以做类似的事情

 char ws[3];
 sprintf(ws, "%d", sizeof(long));
 fprintf(stderr, "%s\n", ws);

然后,您可以ws与不同的值进行比较以查看字长。我确信 Windows 具有类似的基本类型,可以帮助您判断字长。

于 2013-03-22T19:06:31.237 回答