引数を持たないにもかかわらず、GetWindowLong
(およびGetWindowLongPtr
)には 'ANSI'(A)と 'Unicode'(W)のフレーバーがあることがわかりました。 MSDN page on GetWindowLong
は、これらの亜種が存在することを示していますが、理由は言及していません。GetWindowLongにANSIとUnicodeのバリエーションがあるのはなぜですか?
CreateWindowEx
(A/Wの味もあります)またはRegisterClass
のエンコーディングと一致する必要がありますが、これは意味があるとは思えません。どうやら、それは重要です。なぜなら、someone reported that the Unicode version may fail on XP(XPはNTですが、私が理解しているように、すべてのUnicodeがフードの下にあります)。私はまた、(両方のフレーバーがGetWindowLong
を含む)の32ビットバージョンを逆アセンブルしようとしました。また、明らかなエンコードの違いに基づいて余分な作業が行われています*。
どの機能を選択する必要がありますか?
* GetWindowLong
の味は、彼らが他の関数に渡す周りのブール値を除いて、同一です。このブール値は、メモリ構造のフラグビットと比較されます。スタティックコード分析を使用して追跡することはできません。
愚かな質問 - なぜ2012年にANSIバージョンが気になるのですか? –
私はそれが重要である2つのシナリオを想像することができます。 1つは、サードパーティが提供するウィンドウクラスを使用する場所で、ANSIクラスとして登録します。舞台裏で起こる「A <-> W」変換は、パフォーマンス上の不利益を被る可能性があります。もう1つはANSIを使用する場所です(たとえば、ゲームを作成していて、ウィンドウが全画面表示されているなど)。 –
私は..まあ、関数は内部的に(ANSIアプリケーションのために)変換を行います。また、UIコードの文字列変換のパフォーマンスはあまり問題になりません。 –