MSVC 64 ビット コンパイラを使用して、以下のコードの論理エラーを解決しようとしています。
このコードは、以前は 32 台のマシンで問題なく動作していました。
return ((ULONG) DupThreadHandle);
64 ビットの世界では、すべてのスレッド ハンドルが 64 ビット (実際には 6 バイト) であることを知りました。したがって、宛先の型が 32 ビットの ULONG であるため、このコードは明らかに間違っています。
しかし、msdn は basetsd.h をインクルードして C コードの 64 ビット移植のためにタイトルで述べたヘルパー関数を使用することを推奨しています。
しかし、私の質問は、そのようなヘルパー関数がどのように概念的に 6 バイト アドレスを 4 バイト アドレスに変更するのかということです。すでにスレッドが6バイトアドレスに配置されているためです。この 4 バイトのアドレスはどの程度意味がありますか? 宛先タイプを変更したくありません。問題は再帰的な警告になるためです。