2008-12-17 96 views
2

我在RAD Studio 2009中遇到了一些問題。
如您所知,可以在MSVS中右鍵切換Unicode支持(右鍵單擊solution-> properties-> character set = not set)。我需要在RAD Studio中找到這個功能,我知道它存在但不知道究竟在哪裏。
這是唯一停止我在Socket Chat大學項目上的工作。
P.S.從CodeGear官方網站安裝更新後出現問題。
是否可以關閉RAD Studio 2009中的Unicode支持?

+1

或許,如果你發佈了關於「問題」的問題,有可能是一個解決方案即使在開啓unicode支持的情況下也能正常工作。 – 2008-12-17 20:50:55

+0

我需要從編輯中獲取字符串。
TMainForm-> IPEdit-> Text.c_str()。
我認爲它必須是char *返回值,但它是wchar_t *。我需要將其轉換爲char *以使用套接字函數。任何想法如何做到這一點? – chester89 2008-12-17 20:58:10

回答

12

簡短的回答:沒有,沒有這樣的功能關閉的Unicode在RAD Studio 2009.

0

I`ve解決的問題是這樣的:


    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; 

,但在我看來,可以去看另一種方式

1

是否可以關閉它?更好的問題是:你應該關掉它嗎?答案是:NO。

設計應用程序的目的很遠,以便在序列化(例如,在應用程序的套接字中)時正確發送Unicode字符,而不是在Unicode世界中設計非Unicode程序。即使是一個簡單的項目,原則上也值得學習Unicode。

1

準確地說,您可以通過修改「TCHAR maps to char」的項目選項來定義您的C++ Builder應用程序,而不需要定義#UNICODE標誌。

這意味着,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); 
+0

_TEXT宏等的使用可以在那裏使用,所以如果移動到Unicode,它不會像顯式字符串那樣可怕。 – 2009-01-13 15:20:57

3

您可以選擇使用的UnicodeString :: t_str()方法要小心。如果您在爲Ansi而不是Unicode編譯的項目中調用它,則t_str()將更改UnicodeString的內部內容。這可能會產生意想不到的副作用,特別是對於來自控件的UnicodeString值。

3

切斯特 - 你不需要直接調用WideCharToMultiByte()。讓RTL做的工作適合你:

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

有一個更好的辦法,我不喜歡這樣寫道:

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