私は C++ 初心者なので、ばかげた質問に思えるかもしれませんが....
コード例のいたるところで DWORD が使用されています。DWORD の真の意味を調べてみると、どうやら unsigned int (0 ~ 4,294,967,295) に過ぎないようです。私の質問は、なぜ DWORD があるのですか? 整数型 'unsigned int' が提供しないと何が得られるでしょうか? 移植性とマシンの違いと関係がありますか?
DWORD
は C++ 型ではなく、 で定義されてい<windows.h>
ます。
その理由は、DWORD
Windows 関数が依存する特定の範囲と形式を持っているため、その特定の範囲が必要な場合はその型を使用します。(または、「ローマにいるときは、ローマ人が行うように」と言うように。) あなたにとって、それはたまたま に対応してunsigned int
いますが、常にそうであるとは限りません。安全のために、実際の値に関係なくDWORD
、 が期待される場合に使用してください。DWORD
たとえば、範囲や形式を変更した場合、同じ要件を維持するためunsigned int
に別の型を使用する可能性があり、使用するDWORD
すべてのコードDWORD
は賢明ではありません。(同様に、DWORD
必要性を判断しunsigned long long
て変更することもできます。そうすれば、使用するすべてのコードDWORD
が賢明ではなくなります。)
また、範囲が 0 ~ 4,294,967,295 である必要unsigned int
はないことに注意してください。ここを参照してください。
MS-DOS と Windows 3.1 が 16 ビット モードで動作していたとき、Intel 8086 ワードは 16 ビット、Microsoft WORD は 16 ビット、Microsoft DWORD は 32 ビットで、典型的なコンパイラの unsigned int は 16 ビットでした。
Windows NT が 32 ビット モードで動作していたとき、Intel 80386 ワードは 32 ビット、Microsoft WORD は 16 ビット、Microsoft DWORD は 32 ビット、そして典型的なコンパイラの unsigned int は 32 ビットでした。WORD および DWORD という名前はもはや自己記述的ではありませんでしたが、Microsoft プログラムの機能は保持されていました。
Windows が 64 ビット モードで動作する場合、Intel ワードは 64 ビット、Microsoft WORD は 16 ビット、Microsoft DWORD は 32 ビット、一般的なコンパイラの unsigned int は 32 ビットです。WORD および DWORD という名前はもはや自己記述的ではなく、さらに unsigned int は最小の驚きの原則に準拠しなくなりましたが、多くのプログラムの機能を保持しています。
WORD や DWORD が変更されることはないと思います。
SDK 開発者は、typedef を使用して独自の型を定義することを好みます。これにより、すべてのクライアント コードを変更することなく、基になる型を 1 か所だけ変更できます。この規則に従うことが重要です。DWORD が変更される可能性は低いですが、DWORD_PTR などの型は、Win32 や x64 などのプラットフォームによって異なります。したがって、一部の関数に DWORD パラメーターがある場合は、unsigned int ではなく DWORD を使用すると、コードは将来のすべての Windows ヘッダー バージョンでコンパイルされます。
私自身、 unsigned int はプラットフォーム固有のものだと思います。整数は、8 ビット、16 ビット、32 ビット、さらには 64 ビットの場合もあります。
一方、DWORD は独自のサイズ (ダブル ワード) を指定します。Word は 16 ビットであるため、DWORD はすべてのプラットフォームで 32 ビットとして認識されます。