Win32APIの関数を使っていると「LPWSTR」「LPCSTR」などあまり見慣れない型を使っていることがありますね。
この記事では、そんな紛らわしい「LP○○STR」について解説を行います。
LP○○STRとは
Win32APIで使用される「LP○○STR」は以下の6種類です。
LPSTR | char* |
LPCSTR | const char* |
LPTSTR | TCHAR* |
LPCTSTR | const TCHAR* |
LPWSTR | WCHAR* |
LPCWSTR | const WCHAR* |
それぞれ「LP」は「long pointer」の略、「C」は「const」の略、「T」は「TCHAR」の略、「W」は「WCHAR」の略です。
LPSTR、LPCSTR
LPSTR、LPCSTRは「char*」「const char*」のことです。
こちらについては取り立てて説明するまでもありません。
LPWSTR、LPCWSTR
LPWSTR、LPCWSTRは「WCHAR*」「const WCHAR*」のことです。
WCHARというのは「wchar_t」という型のことで、Unicode文字を使用するための2byteの型です。
LPTSTR、LPCTSTR
LPTSTR、LPCTSTRは「TCHAR*」「const TCHAR*」のことです。
TCHARはプロジェクトの文字セットにより「char」と「WCHAR」が切り替わります。
文字セット | 適用される型 |
Unicode文字 | WCHAR |
マルチバイト文字 | char |
文字セットが変わってもコードを変更する必要がないため、LPTSTR、LPCSTRが使用されている関数も多くあります。
ちなみにLPTSTR、LPCTSTRはプロジェクトの文字セットによっては下表のようにLPSTR、LPCSTR、LPWSTR、LPCWSTRに置き換えることも可能です。
Unicode文字 | マルチバイト文字 | |
LPTSTR | LPWSTR | LPSTR |
LPCTSTR | LPCWSTR | LPCSTR |