2012-05-11 10 views
1

私は最近、いくつかのWinsockプログラミングを行っています。私はWindows SDKの中で多くのことをしません。私は若い頃から実際のWin32アプリケーションを構築していませんでしたが、それについては考えていませんでしたが、今はプラットフォームに依存しない他の型をラップして定義されている型のいくつかを見ています。彼らがそうしなければならないときにそれらを使用するでしょう。私はネイティブのカウンターパーツの上にPSTRまたはDWORDを使用するよりも利点がありません。 Winsock Reference には、定義されているstructs and typedefsのすべてをリストするページがあります。彼らはすべての構造体を大文字にtypedefし、すべての型をこのような大文字にtypedefするためにWindows SDKの設計が決定されたときに達成しようとしていた全体的な戦略を理解していません。なぜWindowsで定義されたデータ型を使用しますか?

Windowsでコードを記述するときにも、大文字化されていないバージョンを使用することがあったとしても、将来的に必要な場合にコードを移植するのが難しくなる理由が分かりません。私はいつでもネイティブタイプとオリジナルのWinsock構造を使用します。私はこの質問への答えを探すためにいくつかの試みを試みましたが、おそらく私はどのようにして質問を適切にフレーズするのか考えることはできません。私が行方不明になっているこれにいくつかの利点はありますか?誰も私のためにこれについていくつかの光を当てることができますか?

+1

16ビットから32ビットの64ビットWindowsに移植されたコードは、変更がほとんど必要ありません。なぜなら、これらのtypedefに依存していたからです。 –

答えて

2

Windows SDKのtypedefが必要に応じて調整されるという利点があります。最近の歴史ではおそらく最良の例はDWORD_PTRでしょう。これは、正しく使用されたときにx64ビルドで正しく動作しますが、「ネイティブタイプ」と呼ばれるものでこの作業を行うためには、言語標準)を使用します。

また、Winsockの機能のいくつかは、元のBSDソケット関数の正確なものではないことに注意してください。したがって、従来の理由や簡潔さのために、人工的に分離することが理にかなっています。

LPTSTRのように、ビルドによって調整されるため、言語標準で定義されていない特定のWin32タイプについても同じことが言えます。

クロスプラットフォームプログラミングに携わっており、さまざまな理由でstdint.hのタイプ(すべてまたは一部)に頼ることができない場合は、DWORDのようなタイプがありますこれは、あるインターフェース(API)と話すときはいつでも関係があります。

+0

DWORD_PTRが最悪の例です。遅く追加されました。 –

+0

@ハンス:なぜあなたはより良いものを与えませんか?また、私の答えが「最近の歴史で」と言った理由もあります:) – 0xC0000022L

関連する問題