web-dev-qa-db-ja.com

LPCTSTRとは何ですか?

LPCTSTRLPCTSTRのようなもの(たとえばHDC)とは何ですか?

38
user61273

Brian Kramerの引用 MSDNフォーラム

LPCTSTR =[〜#〜] l [〜#〜]‌ong[〜#〜 ] p [〜#〜]‌ointer to a[〜#〜] c [〜#〜]‌onst[〜#〜] t [〜#〜]‌CHAR[〜#〜] str [〜#〜]‌ing(心配しないでください。長いポインターはポインターと同じです。16ビットウィンドウでは2種類のポインターがありました。)

これがテーブルです:

  • LPSTR = char*
  • LPCSTR = const char*
  • LPWSTR = wchar_t*
  • LPCWSTR = const wchar_t*
  • LPTSTR = char* or wchar_t* 応じて _UNICODE
  • LPCTSTR = const char* or const wchar_t* 応じて _UNICODE
78
fellahst

TCHARに関連する型を使用する必要はありません。

これらのタイプ、それらを使用するすべての構造タイプ、およびすべての関連する関数は、コンパイル時にANSIまたはUNICODEバージョン(プロジェクトの構成に基づく)にマップされます。 ANSIバージョンでは通常、名前の末尾にAが追加され、UnicodeバージョンではWが追加されます。必要に応じて、これらを明示的に使用できます。 MSDNは必要に応じてこれに注意します。たとえば、MessageBoxIndirectAおよびMessageBoxIndirectW関数をここに一覧表示します。 http://msdn.Microsoft.com/en-us/library/windows/desktop/ms645511(v = vs.85) .aspx

多くのユニコード関数の実装が欠けていたWindows 9xをターゲットにしているのでない限り、ANSIバージョンを使用する必要はありません。 Windows 9xをターゲットにしている場合、コードがTCHARがcharまたはwcharであるかどうかを想定していない限り、TCHARを使用して同じコードベースからansiおよびunicodeバイナリを構築できます。

Windows 9xを気にしない場合は、プロジェクトをUnicodeとして構成し、TCHARをWCHARと同じものとして扱うことをお勧めします。必要に応じてW関数と型を明示的に使用できますが、Windows 9xでプロジェクトを実行する予定がない限り、それは重要ではありません。

6
Vincent Povirk

これらのタイプは、MSDNの Windows Data Types に記載されています。

LPCTSTR

LPCWSTRが定義されている場合はUNICODE、それ以外の場合はLPCSTRです。詳細については、「文字列のWindowsデータ型」を参照してください。

このタイプは、WinNT.hで次のように宣言されています。

#ifdef UNICODE
 typedef LPCWSTR LPCTSTR; 
#else
 typedef LPCSTR LPCTSTR;
#endif

LPCWSTR

16ビットUnicode文字のnullで終了する定数文字列へのポインター。詳細については、「フォントで使用される文字セット」を参照してください。

このタイプは、WinNT.hで次のように宣言されています。

typedef CONST WCHAR *LPCWSTR;

HDC

デバイスコンテキスト (DC)へのハンドル。

この型は、WinDef.hで次のように宣言されています。

typedef HANDLE HDC;
1
CodesInChaos