Win32コマンドラインアプリケーションでargvをワイド文字に変換する方法は?

StackOverflow https://stackoverflow.com/questions/7333416

質問

プログラムでwin32api for Cを使用してシリアルポートから読み取りますが、かなり低レベルのもののようです。シリアルポートから読み取るより良い方法がないと仮定すると、CreateFile関数にはLPCWSTR引数が含まれます。これを読んだところ、LPCWSTRはwchar_t型のようです。まず、wcharとcharの違いがよくわかりません。また、ansiとunicodeについて読んだことがありますが、それが自分の状況にどのように適用されるかはよくわかりません。

私のプログラムはwmainではなくmain関数を使用しており、コマンドラインから引数を取得してwchar_t変数に格納する必要があります。今では、その場でひもを作っただけでこれができることがわかりました。 ジェネラコディセタグプレ

Lがchar配列をwchar配列に変換するように見えるため。ただし、私がそうすると機能しません; ジェネラコディセタグプレ

明らかに構文エラーだからです。私の質問は、通常の文字列をwchar_t文字列に変換する簡単な方法はありますか?

または、このUnicodeを完全に回避し、WindowsでCを使用してシリアルから別の方法で読み取る方法はありますか。

役に立ちましたか?

解決

Lは文字列リテラル専用です。

winapi mbstowcs()関数などを使用して、argv文字列(おそらくunsigned char)をwcharに変換する必要があります。

他のヒント

CreateFileという名前のwinapi関数はありません。CreateFileWとCreateFileAがあります。CreateFileは、_UNICODEマクロが定義されているかどうかに応じて、これらの実際の関数の1つにマップされるマクロです。CreateFileWはLPCWSTR(別名const wchar_t *)を取り、CreateFileAはLPCSTR(別名const char *)を取ります。

Unicodeに移行する準備がまだできていない場合は、CreateFileA()関数を明示的に使用してください。または、プロジェクト設定を変更します:プロジェクト+プロパティ、一般、文字セット。ゼロ以外のコストがあり、基盤となるオペレーティングシステムは完全にUnicodeベースです。したがって、CreateFileA()は、現在のシステムコードページに従ってconst char *をconstwchar_t *に変換する変換レイヤーを通過します。

MultiByteToWideChar を使用できますANSIからUNICODEにマップします。swprintf呼び出しを行うには、次のようにwcharの配列を定義する必要があります。 ジェネラコディセタグプレ

アプリケーションをマルチバイト文字セットに対してコンパイルすることでUnicodeを回避することは可能ですが、レガシーの理由でそうしない限り、これを行うことはお勧めできません。基盤となるOSのエンコーディングであるため、Windowsはいずれにせよ最終的にはUnicodeに変換し直す必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top