2011-09-14 31 views
9

文字ではなく、末尾にA文字が追加されたWin32 API関数を呼び出す点の違いは何ですか?Win32 APIの `A`関数と` W`関数の違いは何ですか?

私はそれがASCIIWIDE CHARACTERまたはUnicodeだと知っていますが、出力や入力の違いは何ですか?

たとえば、GetDefaultCommConfigAを呼び出すと、WCHAR文字列ではなくASCII文字列でCOMMCONFIG構造体が埋められますか? (または、GetDefaultCommConfigWためその逆)

つまり、どのように私は、文字列をコードする中、ASCIIまたはUNICODEが何であるかを知っています、それは私はAまたはW呼び出す機能のバージョンである必要がありますか?正しい?

私はこれを見つけましたquestion、しかし私は私の質問に答えるとは思わない。

答えて

18

A関数は、入出力としてAnsi(ASCIIではなく)文字列を使用し、W関数はUnicode文字列を代わりに使用します(NT4以前のUCS-2、W2K以降のUTF-16)。詳細についてはRefer to MSDNを参照してください。

+4

+1また、これらのパラメータとして渡されるすべての構造体もAとWのバージョンで提供されることに注意してください。たとえば、RegisterClassExAはANSI LPCSTRを使用するWNDCLASSEXAをとりますが、WバージョンではLPCWSTRを使用していますが、WCHARをAバージョンに渡すことはできません。逆にしようとすると、タイプに関するコンパイラエラーが発生しますマッチング - かなり一般的な初心者のエラーは、キャストを使わずに正しいタイプを使うようにコードを変更するのではなく、キャストを使ってエラーを "消え去らせる"ことです。 – BrendanMcK

関連する問題