まず第一に、それは正確に何ですか?私はそれがポインタだと思います(LPCは長いポインタ定数を意味します)が、「W」はどういう意味ですか?文字列への特定のポインターか、特定の文字列へのポインターですか?たとえば、「TestWindow」という名前のウィンドウを閉じます。
HWND g_hTest;
LPCWSTR a;
*a = ("TestWindow");
g_hTest = FindWindowEx(NULL, NULL, NULL, a);
DestroyWindow(g_hTest);
コードは違法であり、const char [6]はCONST WCHARに変換できないため機能しません。まったくわかりません。これらすべてのLPCWSTR、LPCSTR、LPSTRを明確に理解したいと思います。何かを見つけようとしましたが、さらに混乱しました。 msdnサイトでFindWindowEx
は次のように宣言されています
HWND FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);
したがって、最後のパラメーターはLPCSTRであり、コンパイラーはLPCWSTRを要求します。助けてください。
LPCWSTR
は、「定数ワイド文字列へのロングポインタ」を表します。 WはWideを表し、文字列が通常のchar
ではなく2バイト文字で格納されることを意味します。非ASCIIのみの文字列を処理する必要があるC/C++コードに共通。=
通常のCリテラル文字列を取得してLPCWSTR
に割り当てるには、接頭辞Lを付ける必要があります
LPCWSTR a = L"TestWindow";
LPCWSTR
はwchar_t const *
と同等です。関数呼び出しによって変更されないワイド文字列へのポインターです。
文字列リテラルにLを追加することで、LPCWSTR
sに割り当てることができます:LPCWSTR *myStr = L"Hello World";
LPCTSTRおよびその他の[〜#〜] t [〜#〜]型は、プロジェクトのUnicode設定に応じて文字列型を取ります。 _UNICODE
がプロジェクトに定義されている場合、T型の使用はワイド文字形式と同じです。それ以外の場合は、Ansi形式です。適切な関数も次のように呼び出されます。FindWindowEx
は、この定義に応じてFindWindowExA
またはFindWindowExW
として定義されます。
これは、定数のワイド文字列(つまり、ワイド文字の文字列)への長いポインタです。
これは幅の広い文字列なので、定数をL"TestWindow"
のようにする必要があります。中間のa
も作成せず、パラメータにL"TestWindow"
を渡すだけです。
ghTest = FindWindowEx(NULL, NULL, NULL, L"TestWindow");
厳密に修正したい場合、「LPCTSTR」は「テキスト」文字列です。Unicodeビルドではワイド文字列、ANSIビルドではナロー文字列です。したがって、適切なマクロを使用する必要があります。
ghTest = FindWindow(NULL, NULL, NULL, _T("TestWindow"));
ただし、UnicodeとANSIの両方の文字セット用にコンパイルできるコードの作成を気にする人はほとんどいません。実際に正しく動作しない場合は、少しの利益のためにかなりの余分な作業になる可能性があります。この特定のケースでは、余分な作業はあまりありませんが、文字列を操作している場合は、正しい関数に解決される文字列操作マクロのセット全体があります。