3

Windows API には、Win64 をサポートするための新しい整数型がいくつかあります。それらは常にサポートされているわけではありません。たとえば、それらは MSVC6 には存在しません

#ifこれらのタイプが でサポートされているかどうかを検出する条件を作成するにはどうすればよい<windows.h>ですか?

(私のコードは、MSVC6 を含むさまざまなバージョンの Microsoft Visual C++ でコンパイルする必要があります。そのため#if、新しいコンパイラでそれらを無効にするために、これらの型の独自の定義を提供する必要があります)。

(サーチャーの場合、タイプの完全なリストは次のとおりです: DWORD_PTR、INT_PTR、LONG_PTR、UINT_PTR、ULONG_PTR)

4

2 に答える 2

5

マクロMSC_VERは、MSVC 6 の範囲内の値です[1200, 1300)。したがって、使用できます#if MSC_VER>=1200 && MSC_VER<1300

編集:アンダースが言ったように、これは「私のコンパイラーMSVC 6です」を超えたテストでは実際には有効ではありません。ただし、次のものも使用できます。

#if defined(MAXULONG_PTR)

DWORD_PTRは値型であるため、 で最大値が定義されていますbasetsd.h

于 2010-04-27T17:08:28.867 に答える
4

これらの型は typedef であるため、プリプロセッサ段階で定義されているかどうかを判断するための優れた信頼できる方法はありません。コンパイラのバージョンをテストするという MSN の提案はかなり良いですが、Anders がコメントで示したように、より最近の SDK が使用されている可能性があります (VC6 は 2003 SDK までサポートされていたと思います - それらのタイプがその中にあるかどうかはわかりません) SDK かどうか)。

次のような、これらの型を使用するマクロとして SDK が定義するものを確認できますGetWindowLongPtr

#if !defined( GetWindowLongPtr)
typedef DWORD DWORD_PTR;
#endif

不器用ですが、不器用で立ち往生している可能性があると思います。

于 2010-04-27T17:26:33.517 に答える