RAD Studio 2009 で少し問題があります。
ご存知のように、MSVS で Unicode サポートをオフに切り替えることができます (ソリューションを右クリック -> プロパティ -> 文字セット = 設定なし)。RAD Studio でこの機能を見つける必要があります。存在することは知っていますが、正確な場所がわかりません。
ソケット チャットの大学プロジェクトでの私の仕事を止める唯一のことです。
PS CodeGear 公式サイトからアップデートをインストールした後に問題が発生しました。
7 に答える
UnicodeString::t_str() メソッドの使用には注意が必要です。Unicode ではなく Ansi 用にコンパイルされたプロジェクトでこれを呼び出すと、t_str() は UnicodeString の内部コンテンツを変更します。これには、特にコントロールから取得される UnicodeString 値の場合に、予期しない副作用が生じる可能性があります。
チェスター - WideCharToMultiByte() を直接呼び出す必要はありません。RTL に作業を任せます。
AnsiString s = Form2->Edit1->Text;
MessageBoxA(NULL, s.c_str(), "It`s ok", MB_OK);
より良い方法があります、私はこのようにします:
MessageBox(NULL, Form2->Edit1->Text.w_str(), L"It`s ok", MB_OK);
正確には、「TCHAR maps to char」のプロジェクト オプションを変更することで、#UNICODE フラグを定義せずに C++ Builder アプリケーションをビルドできます。
これは、SendMessage が SendMessageA などを呼び出し、TCHAR を呼び出すことを意味します。
ただし、VCL 関数を使用している場合、それらに相当する非 Unicode はありません。VCL は本質的に Unicode になり、変更できなくなりました。
Re: あなたの「解決策」 - もっと簡単な方法があります。これは、TCHAR = char または wchar_t の両方で機能します。
MessageBox(NULL, Form2->Edit1->Text.t_str(), _TEXT("It`s ok"), MB_OK);
オフにすることは可能ですか?より良い質問は、オフにする必要があるかどうかです。答えはノーです。
Unicode の世界で非 Unicode プログラムを設計するよりも、シリアル化されたときに (たとえば、アプリケーションのソケットで) Unicode 文字が適切に送信されるようにアプリケーションを設計することははるかに困難です。単純なプロジェクトであっても、原則として Unicode を学ぶ価値があります。
私はこの方法で問題を解決しました:
wchar_t* str = Form2->Edit1->Text.w_str();
char* mystr = new char [Form2->Edit1->Text.Length() + 1];
WideCharToMultiByte(CP_ACP, 0, str, -1, mystr, Form2->Edit1->Text.Length() + 1, NULL, NULL);
MessageBox(NULL, mystr, "It`s ok", MB_OK);
delete []mystr;
しかし、私には別の方法があるようです