3

アプリケーションの 32 ビット バージョンと 64 ビット バージョンがあり、32 ビット バージョンが 64 ビット Windows で実行されている場合に備えて、何か特別なことをする必要があります。プラットフォーム固有の呼び出しを避け、代わりに Qt または boost を使用したいと思います。Qt の場合、Q_OS_WIN64 のほかに Q_PROCESSOR_X86_32 を見つけましが、これがまさに必要なもののようです。しかし、うまくいきません:

#include <QtGlobal>

#ifdef Q_PROCESSOR_X86_64
  std::cout << "64 Bit App" << std::endl;
#endif

#ifdef Q_PROCESSOR_X86_32
  std::cout << "32 Bit App" << std::endl;
#endif

64 ビット Windows 7 で 32 ビット アプリを実行すると、何も表示されません。これらのグローバル宣言のドキュメントを誤解していますか?

多少の混乱があるため、これはアプリが現在実行されている OS を検出することではなく、アプリ自体の「ビット数」を検出することです。

4

5 に答える 5

1

プリプロセッサ ディレクティブはコンパイル時に評価されます。やりたいことは、32 ビット用にコンパイルし、64 ビット システムで実行しているかどうかを実行時にチェックすることです (プロセスは 32 ビットになることに注意してください)。

#ifdef Q_PROCESSOR_X86_32
  std::cout << "32 Bit App" << std::endl;

  BOOL bIsWow64 = FALSE;
  if (IsWow64Process(GetCurrentProcess(), &bIsWow64) && bIsWow64)
      std::cout << "Running on 64 Bit OS" << std::endl;
#endif

その例はWindows 固有のものです。これを実行するための移植可能な方法はありません。Linuxでは、 runまたはand使用してその出力を確認できます。system("getconf LONG_BIT")system("uname -m")

于 2016-04-15T14:17:41.907 に答える
0

正しい名前はQ_PROCESSOR_X86_32またはQ_PROCESSOR_X86_64です。

ただし、将来的にアプリケーションが ARM で実行される場合、これは機能しません。むしろ、チェックすることを検討してsizeof(void *)くださいQT_POINTER_SIZE

さらに、Windows では通常、GUI アプリケーションは stdout に出力できないため、動作する可能性がありますが、何も表示されないことに注意してください。代わりに、デバッガーまたはメッセージ ボックスのいずれかを使用するか、ダミー ファイルに出力します。

于 2016-04-15T14:13:02.460 に答える