是否可以在RAD Studio 2009中关闭Unicode支持?

时间:2008-12-17 20:46:21

标签: delphi ide delphi-2009

我对RAD Studio 2009有点麻烦。
如您所知,可以在MSVS中关闭Unicode支持(右键单击solution-> properties-> character set = not set)。我需要在RAD Studio中找到这个功能,我知道它存在,但不知道究竟在哪里 这是唯一阻止我在Socket Chat大学项目上工作的东西 附:从CodeGear官方网站安装更新后出现问题。

7 个答案:

答案 0 :(得分:12)

简短回答:不,在RAD Studio 2009中没有关闭Unicode的功能。

答案 1 :(得分:3)

您必须小心使用UnicodeString :: t_str()方法。如果在为Ansi而不是Unicode编译的项目中调用它,则t_str()会更改UnicodeString的内部内容。这可能会产生意想不到的副作用,尤其是对于来自控件的UnicodeString值。

答案 2 :(得分:3)

chester - 您无需直接调用WideCharToMultiByte()。让RTL为您完成工作:

AnsiString s = Form2->Edit1->Text;
MessageBoxA(NULL, s.c_str(), "It`s ok", MB_OK);

答案 3 :(得分:1)

可以关掉它吗?更好的问题是:你应该把它关掉吗?答案是:NO。

设计应用程序以便在序列化时(例如,在应用程序的套接字中)正确发送Unicode字符,而不是在Unicode世界中设计非Unicode程序。即使是一个简单的项目,原则上也值得学习Unicode。

答案 4 :(得分:1)

准确地说,您可以通过修改“TCHAR映射到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);

答案 5 :(得分:1)

有更好的方法,我这样做:

MessageBox(NULL, Form2->Edit1->Text.w_str(), L"It`s ok", MB_OK);

答案 6 :(得分:0)

我用这种方式解决了这个问题:


    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;

但在我看来还有另一种方式