引数LPWSTRをLPTSTRに変換しようとしていますが、文字列を簡単に変換するために使用できるライブラリはありますか?
2 に答える
が定義されている場合_UNICODE
、実行する変換はありません-aTCHAR
は、WCHAR
であり、LPWSTR
はLPTSTR
;です。それ以外の場合TCHAR
は、、CHAR
およびLPTSTR
ですLPSTR
。この最後のケースでは、WideCharToMultiByte APIを使用して、LPWSTR
(つまり、Unicode文字列)を「狭い」文字列に変換できます。
また、 WindowsタイプとCタイプへのマップ(VC ++の場合は確かにそうです)、および現在のCロケールが変換に使用する予定のロケールであるとwcstombs
想定して、Cライブラリ関数を使用できます。CHAR
WCHAR
char
wchar_t
この問題に関する詳細については、 Alfのコメントも参照してください。最も重要な点は、出力エンコーディングは一般に入力を忠実に表すことができないため、可能であればそのような変換を避ける必要があるということです。テキストが文字化けしているだけでなく、必要なファイルが見つからないか、さらに悪いことに、間違ったパスで動作していることを意味します。
したがって、(@ prazuberの回答のように)Unicodeを使用するようにプロジェクトを設定し、この種の変換を回避するために、常にUnicode対応のAPIを使用するようにしてください。
それでも、Windows APIのUnicodeバージョンのみを使用すると、Windows9xとの互換性が失われる可能性があることに注意してください。これはほとんどの場合問題ではありませんが、アプリケーションでそのようなOSをサポートすることが重要な場合は、使用しているAPIがMSLUでサポートされているかどうかを確認してください。
LPTSTRは次のように定義されます。
#ifdef UNICODE
typedef LPWSTR LPTSTR;
#else
typedef LPSTR LPTSTR;
#endif
したがって、必要なのは文字セットをUnicodeに切り替えることだけです。たとえば、Visual Studioでは、 [構成のプロパティ] ->[一般] ->[文字セット] ->[ Unicode文字セットの使用]に移動します。