Delphi 是否可以在RAD Studio 2009中关闭Unicode支持?
RAD Studio 2009有点问题。Delphi 是否可以在RAD Studio 2009中关闭Unicode支持?,delphi,ide,delphi-2009,Delphi,Ide,Delphi 2009,RAD Studio 2009有点问题。 正如您所知,可以在MSV中关闭Unicode支持(右键单击解决方案->属性->字符集=未设置)。我需要在RAD Studio中找到此功能,我知道它存在,但不知道确切位置。 这是唯一让我在Socket聊天大学项目上的工作停滞不前的事情。 另外,问题出现在我从CodeGear官方网站安装更新后。我通过以下方式解决了问题: wchar_t* str = Form2->Edit1->Text.w_str(); char* mystr = new
正如您所知,可以在MSV中关闭Unicode支持(右键单击解决方案->属性->字符集=未设置)。我需要在RAD Studio中找到此功能,我知道它存在,但不知道确切位置。
这是唯一让我在Socket聊天大学项目上的工作停滞不前的事情。
另外,问题出现在我从CodeGear官方网站安装更新后。
我通过以下方式解决了问题:
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;
但在我看来,似乎还有另一种方法简短的回答:不,在RAD Studio 2009中没有关闭Unicode的功能。可以关闭它吗?更好的问题是:你应该关掉它吗?答案是:没有
与在Unicode世界中设计非Unicode程序相比,设计应用程序使Unicode字符在序列化时能够正确发送(例如,在应用程序的套接字中)远远不够。即使是一个简单的项目,原则上还是值得学习Unicode的。 < P>确切地说,您可以通过修改“tchar映射到char”的项目选项来定义没有构建的u+Unicode标志的C++ Builder应用程序。 这意味着SendMessage将调用SendMessageA等和TCHAR 但是,如果您使用的是任何VCL函数,则没有与之对应的非unicode函数。VCL现在固有的是Unicode,这是无法更改的 回复:你的“解决方案”——有一个更简单的方法。它同时适用于TCHAR=char或wchar\u t:
MessageBox(NULL, Form2->Edit1->Text.t_str(), _TEXT("It`s ok"), MB_OK);
使用UnicodeString::t_str()方法时必须小心。如果在为Ansi而不是Unicode编译的项目中调用它,t_str()会更改Unicode的内部内容。这可能会产生意外的副作用,尤其是对于来自控件的析构函数值。chester-您不需要直接调用WideChartMultiByte()。让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);
如果您发布了一个关于“问题”的问题,那么可能有一个解决方案即使在启用unicode支持的情况下也能工作。我需要从编辑中获取字符串
TMainForm->IPEdit->Text.c_str()<我想它一定是char*返回值,但它是wchar\u t*。我需要将其转换为char*以使用套接字函数。你知道怎么做吗?在那里可以使用_文本宏等等,所以如果转移到Unicode,显式字符串就不会那么可怕了。雷米,很高兴在这里见到你!欢迎来到StackOverflow。这里的Delphi社区变得更加富有了!