Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 是否可以在RAD Studio 2009中关闭Unicode支持?_Delphi_Ide_Delphi 2009 - Fatal编程技术网

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

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

RAD Studio 2009有点问题。
正如您所知,可以在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社区变得更加富有了!