LPCTSTR
の配列へのポインタですconst wchar_t
。 strPermission
配列の最初の文字を指します。 L"0"
の配列である文字列リテラルでありconst wchar_t
、 のポインターに減衰しますconst wchar_t
。しかし、ポインターは等しくなく、異なる配列を指しています。これが、私たちが C++ を発明した理由です。ご利用ください。
std::wstring strPermission = Method();
return (strPermission == L"0"); //works like magic!
または、Method
保持しなければならないものを返す場合は、少なくともこれを行います
std::unique_ptr<wchar_t[]> strPermission = Method();
return (std::wcscmp(strPermission.get(), L"0")==0);
//wcscmp is for comparing strings, but returns 0 if they're equal.
strPemission
また、ゼロ文字の後にヌル文字が続く配列を指していると確信していますか? そうでなく、 を使用していない場合はwstring
、それが配列を指していることも確認する必要があります
if (strPermission)
//do stuff
else
//its a NULL pointer.
LPCTSTR
の型は実際にはコンパイラ オプションに依存することを指摘するように chris に勧められました。あなたのコードから、あなたが_UNICODE
set でコーディングしていることがわかりconst wchar_t*
ます。_tcscmp
のリテラルを_T("0")
持ち、それらは の配列になりますTCAHR
。文字列については、どこかに typedef を追加する必要があります。
#ifdef _UNICODE
typedef std::string std::tstring
//you'll probably have to add more t helper functions here
#else
typedef std::string std::wstring
//you'll probably have to add more t helper functions here
#endif
コードが常に あることを確認したい場合(これは私が行っていることです)、 .の代わりに_UNICODE
明示的に呼び出します。(対応する もありますが、それを呼び出す理由はあまりありません)。MethodW()
Method()
MethodA()
マクロもありUNICODE
ますが、常にマクロと同じである必要があります_UNICODE
。(これらを自分で定義しないでください。プロジェクト オプションに属します)。