VisualStudioプロジェクトをMBCSからUnicodeCSに変換したいと思います。しかし、ソースコードに900個のconst char配列がありますが、それを自動的に行う方法はありますか?行ごとに行うことは非常にたくさんあります。そうすることで、私は_T( "asd")を"asd"に追加することを指します。
2 に答える
これを回避する方法はありません。
文字列リテラルはL
、コンパイラに常にUnicode(WCHAR /ワイド文字列)としてエンコードするように指示する場合、または_T
「文字セット」がANSI/MBCSまたはUnicodeに設定します。
「ファイル|高度な保存オプション」を使用してソースファイルのエンコーディングをUnicodeに変更したくなるかもしれません...これにより、文字列リテラルのエンコード方法が変わると思います...しかし、そうではありません...それらは引き続きとして扱われます細い文字列。
オプションを理解するのに役立つかもしれないいくつかのリンク。
最善の策は、実行可能なVisual Studioで「マクロ」を作成することです。これにより、文字列リテラルを含むソースコードファイルのセットが調べられ、それらの文字列に_T( )
またはL
プレフィックスが追加されます。
マクロをどの程度洗練するかはあなた次第です...しかし、マクロを文字列とパターンマッチングさせることが可能であるはずです。次に、文字列リテラルをプレフィックス/ラップするかどうかの確認を求めます(Lまたは_T( ))....ソース内のすべての文字列を変換したくないため...一部は狭い文字列のままにする必要があるため。
もう1つのオプションは、[検索]ダイアログを使用して文字列を検索し、文字列を変更する必要があるかどうかを視覚的に確認して、手動で変更することです。
そして最後に、(「リソースに文字列を抽出する」手法とは対照的に、「ソースファイル内の文字列をインプレースでローカライズして置き換えてから再コンパイルする」ローカリゼーション手法に従う「翻訳ツール」を活用できる場合があります。 。これはより一般的なものです)。ソースファイルから文字列を抽出できるそのようなツールがあることを私は知っています...それらの文字列のテーブル/データベースを構築します...次に翻訳されてから再挿入されます...(実際、私は何かを書きました過去にそれを行います)。たぶん、それを行うツールを見つけることができるかもしれません...しかし、文字列を挿入し直すときにLプレフィックスを挿入するように少し変更してください。
実際、アプリケーションをUnicodeにするのに苦労している場合は、ある時点で、アプリケーションのさまざまなローカリゼーションをサポートする予定になると思います。つまり、すべての文字列をリソースに移動することができます。 ...そしてリソースはそれらをUnicodeとして保持します...リソースなどから文字列をロードするためにコードを変更する必要があります。
「abc」、_ T( "abc")、およびその他の文字列が混在する大規模なプロジェクトでこれを行うために、VIMで使用した正規表現の置換を行いました。
:%s/\([^T][^(L]\)"\([^"()]*\)"/\1_T("\2")/g
次に、バージョン管理(TortoiseSVN-diff)を使用して変更を確認し、必要に応じて元に戻しました。YMMVですが、これは私のプロジェクトにとって最速のオプションでした。