Qt获得系统32位或64位信息?

时间:2012-05-10 08:01:48

标签: windows qt 32bit-64bit

我正在使用Qt编写软件。我的任务之一是判断Windows操作系统是32位还是64位,然后根据这一事实进行以下操作。

然而,当我尝试“ QSysInfo :: WordSize ”时,它总是返回32,而我实际上是在Windows 7-64位操作系统上运行。 我也试过

#ifdef _WIN32
return 32;
#elif _WIN64
return 64;

这也会返回32。

实际上Qt在我的系统中是32位。那是问题吗? 如何获得Windows的实际字大小?

由于

4 个答案:

答案 0 :(得分:2)

我个人会致电GetNativeSystemInfo并检查wProcessorArchitecture字段的值。

与所有宏一样,_WIN32_WIN64宏在编译时进行评估。它们告诉您可执行文件的体系结构,而不是运行可执行文件的系统的体系结构。后一种信息,即您想要的信息,只能在运行时确定。

答案 1 :(得分:1)

QSysInfo :: WordSize仅告诉您应用程序是否在32位平台或64位平台上已编译。所以,是的,在使用32位Qt编译的方式中,将返回32的字大小。

对于您的情况,您可能需要查看 IsWow64Process

答案 2 :(得分:0)

这应该在任何不使用“段寄存器”(IOW,具有适当的内存空间)的系统上,包括Qt在内的任何c ++环境中都可以工作:

uint32_t archwidth = sizeof(int *);    // arch width in bytes
uint32_t archbits  = 8 * archwidth;    // arch width in bits

这里的机制是:

在64位体系结构(如XEON)上,CPU将使用8字节(64位)指针,因此archwidth将返回 8 ;然后archbits 8 * 8 64

在32位架构(例如68000)上,CPU将使用4字节(32位)指针,因此archwidth将返回 4 ;然后archbits 4 * 8 32

在16位架构(如6809)上,CPU将使用2个字节(16位)的指针,因此archwidth将返回 2 ;然后archbits 2 * 8 16

答案 3 :(得分:-1)

您可以使用curried(或Q_PROCESSOR_WORDSIZE)。我很惊讶它没有记录,因为它不在私有标头(QtGlobal)中,并且非常方便。

在某些用例中,它可能更可取,因为它不依赖于处理器体系结构。 (例如,对于x86_64以及arm64等,它的定义方式相同)

示例:

names.stream().forEach(createReportCurry.apply(designation))

甚至更好:

#include <QtGlobal>
#include <QDebug>

int main() {
#if Q_PROCESSOR_WORDSIZE == 4
    qDebug() << "32-bit executable";
#elif Q_PROCESSOR_WORDSIZE == 8
    qDebug() << "64-bit executable";
#else
    qDebug() << "Processor with unexpected word size";
#endif
}