Re[3]: Unicode и WinAPI
От: maximilian Украина  
Дата: 11.06.04 10:07
Оценка: 2 (1)
Здравствуйте, Desert_Sun, Вы писали:

D_S>Здравствуйте, maximilian, Вы писали:


M>>Юникод не может быть определен или не определен в системе, его поддержка может быть реализована либо не реализована. Программа, собранная с определением UNICODE, т.е.


M>>
M>>// для Windows API
M>>#define UNICODE
M>>// для СRT
M>>#define _UNICODE
M>>

D_S>...

D_S>я извиняюсь, но что-то у меня не сходится немного в голове ...


D_S>1) если собираем в Visual Studio на XP, не объявляем в программе Unicode

D_S>(а в компиляторе нет этого объявления нигде случайно?),

Случайно нет, но можно прописать UNICODE и _UNICODE в Preprocessor Definitions свойств проекта,
либо использовать #define, например, в stdafx.h, если используются Precompiled Headers.
Первый подход более гибкий. Чтобы иметь возможность собирать программу как в Unicode варианте,
так и в ANSI, можно создать соответствующие конфигурации, которые базируются на имеющихся
Debug и Release, назвать их, скажем, DebugU и ReleaseU, и для этих конфикуращий прописать
UNICODE и _UNICODE в Preprocessor Definitions.

D_S>вместо функций, "без конкретного суффикса" будут использоваться с суфиксом "A"?


Да, если не определены UNICODE и _UNICODE.

D_S>2)

M>>Программа, собранная с определением UNICODE, в Win9x работать не M>будет, т.к. Win9x не поддерживает Unicode
D_S>именно от одного определения не будет работать? Если все функции использовать c суфиксом "A"...

Если явно указать суффикс явно, то будет все пучком

И еще... чтобы иметь возможность собирать как в юникоде так и в анси, вместо типа char следует использовать TCHAR из tchar.h, а строковые и символьные константы заключать в _Т(), например _Т("string") или _T('c')
Re[2]: Unicode и WinAPI
От: Кривенко Антон Владимирович  
Дата: 11.06.04 08:45
Оценка: +1
Здравствуйте, maximilian, Вы писали:

M>в Win9x работать не будет, т.к. Win9x не поддерживает Unicode.


Ну есть MSLU, который пусть не идеален, но многие проблемы позволяет решить...
Unicode и WinAPI
От: Desert_Sun Россия  
Дата: 11.06.04 08:01
Оценка:
Уважаемые господа!

Объясните наконец глупому человеку, в каком случае нужны конструкции типа

#ifdef UNICODE
... используем одни типы переменных и функции, для юникода...
#else
... используем соответственно другие...

Т.е. в каких случаях в системе определен Unicode, а в каких нет.
Кроме того, при программировании под XP можно ли считать, что он в любом случае определен?

Заранее огромное спасибо.
и сказка станет былью
Re: Unicode и WinAPI
От: _nn_  
Дата: 11.06.04 08:14
Оценка:
Здравствуйте, Desert_Sun, Вы писали:

D_S> Уважаемые господа!


D_S>Объясните наконец глупому человеку, в каком случае нужны конструкции типа


D_S>#ifdef UNICODE

D_S>... используем одни типы переменных и функции, для юникода...
D_S>#else
D_S>... используем соответственно другие...

D_S>Т.е. в каких случаях в системе определен Unicode, а в каких нет.

Не в системе, а в программе.
D_S>Кроме того, при программировании под XP можно ли считать, что он в любом случае определен?

D_S>Заранее огромное спасибо.


По большому счету в программе использование этих конструкций не требуется, так как все уже сделано за нас.
Т.е. пример функция MessageBox , в зависимости от определен UNICODE или нет вызывается MessageBoxA или MessageBoxW.

Поэтому следует использовать тип TCHAR вместо явного типа char, это позваолит избежать проблемы при перекомпиляции программы на UNICODE или наоборот, без него.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Unicode и WinAPI
От: maximilian Украина  
Дата: 11.06.04 08:15
Оценка:
Здравствуйте, Desert_Sun, Вы писали:

D_S> Уважаемые господа!


D_S>Объясните наконец глупому человеку, в каком случае нужны конструкции типа


D_S>#ifdef UNICODE

D_S>... используем одни типы переменных и функции, для юникода...
D_S>#else
D_S>... используем соответственно другие...

D_S>Т.е. в каких случаях в системе определен Unicode, а в каких нет.

D_S>Кроме того, при программировании под XP можно ли считать, что он в любом случае определен?

D_S>Заранее огромное спасибо.


Юникод не может быть определен или не определен в системе, его поддержка может быть реализована либо не реализована. Программа, собранная с определением UNICODE, т.е.

// для Windows API
#define UNICODE
// для СRT
#define _UNICODE


в Win9x работать не будет, т.к. Win9x не поддерживает Unicode. А в WinNT будет работать на ура, поскольку Unicode является "родным" для NT.
В случае, когда прорамма собрана без определения UNICODE, работать она будет как под 9х, так и под NT.
В NT, функции, работающие с ANSI строками (имена функций заканчиваются на A), являются просто "заглушками", которые конфертируют строки в Unicode и вызывают соответствующие аналоги (имена заканчиваются на W)
Re[3]: Unicode и WinAPI
От: maximilian Украина  
Дата: 11.06.04 08:51
Оценка:
Здравствуйте, Кривенко Антон Владимирович, Вы писали:

КАВ>Здравствуйте, maximilian, Вы писали:


M>>в Win9x работать не будет, т.к. Win9x не поддерживает Unicode.


КАВ>Ну есть MSLU, который пусть не идеален, но многие проблемы позволяет решить...


Ну с этим никто и не спорит, просто я счел лишним упоминать про него
Re[2]: Unicode и WinAPI
От: Desert_Sun Россия  
Дата: 11.06.04 09:48
Оценка:
Здравствуйте, maximilian, Вы писали:

M>Юникод не может быть определен или не определен в системе, его поддержка может быть реализована либо не реализована. Программа, собранная с определением UNICODE, т.е.


M>
M>// для Windows API
M>#define UNICODE
M>// для СRT
M>#define _UNICODE
M>

...

я извиняюсь, но что-то у меня не сходится немного в голове ...

1) если собираем в Visual Studio на XP, не объявляем в программе Unicode (а в компиляторе нет этого объявления нигде случайно?), вместо функций, "без конкретного суффикса" будут использоваться с суфиксом "A"?

2)
M>Программа, собранная с определением UNICODE, в Win9x работать не M>будет, т.к. Win9x не поддерживает Unicode
именно от одного определения не будет работать? Если все функции использовать c суфиксом "A"...
и сказка станет былью
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.