Страница 2 из 3
Добавлено: 20 апр 2004, 18:04
vg
А что там использовано?
Там ANSI. Складываем, копируем, перемещаем, сравниваем строки. Вообщем сплошной тетрис. Это в одих модулях.
В других модулях - объекты доступа к данным RDBMS с суррогатным COM-подобным интерфейсом.
Добавлено: 20 апр 2004, 18:08
Woozy
vg писал(а):А что там использовано?
Там ANSI.
ANSI C? Для тех строк есть и мультибайтовые, и "широкие" аналоги. Контекстная замена. Ещё все строчные константы передекларировать прицепив L. Ещё все типы - в широкие - по контексту. char -> wchar_t и т.п. Ещё UNICODE. Ещё буферы под строки правильно выделять. Если такая проблема вообще стоит, кто знает может там sizeof от символа задействован.
Добавлено: 20 апр 2004, 18:15
vg
ANSI C? Для тех строк есть и мультибайтовые, и "широкие" аналоги. Контекстная замена. Ещё все строчные константы передекларировать прицепив L. Ещё все типы - в широкие - по контексту. char -> wchar_t и т.п. Ещё UNICODE.
Ты думаешь, а чем я сразу занялся

Ручками, ручками ... Контекстная - замена? Смеёшься? Этож не МСВорд.
Короче, переделал всё в UNICODE:lol:Переделал, наверное, наспех. Не работает.
Конечно, в перспективе, если эти проекты понядобятся для реальной работы - надо быдет всё переписывать в UNICODE и не заморачиваться. Хотел, как быстрее. А вышло, как всегда

Добавлено: 20 апр 2004, 18:16
Woozy
vg писал(а):Контекстная - замена? Смеёшься?
А что?
Добавлено: 20 апр 2004, 18:21
vg
Ну представь, как ты будешь менять по контекстной замене
char * s = "asd";
на
LPTSTR s = _TEXT("asd");
Этож не char на TCHAR заменить. А функции? Там же всё надо менять (хотя здесь можно и по контекстному поиску и замене, конечно). В общем гимору - будь здоров.
Добавлено: 20 апр 2004, 18:24
vg
Ещё буферы под строки правильно выделять
А вот увидел, ты подредактировался.... Во - во.

Добавлено: 20 апр 2004, 18:28
Woozy
Одним словом - невиликая проблема. И декларации, и вызовы функций заменяются контекстной заменой. Потом запустил компиляцию и пошёл по оставшимся ошибкам добивать.
Многократно подобными и более гадкими преобразованиями занимался. Не вижу непреодолимых и даже существенных препятствий.
Добавлено: 20 апр 2004, 18:32
vg
Одним словом - невиликая проблема. И декларации, и вызовы функций заменяются контекстной заменой. Потом запустил компиляцию и пошёл по оставшимся ошибкам добивать.
Многократно подобными и более гадкими преобразованиями занимался. Не вижу непреодолимых и даже существенных препятствий.
Дык это два дня работы в поту (с отладкой и мини тестированием в разных позах)

Ни фига себе, ничего страшного. Если б ещё бабки б платили
Ладно, ОК! Переделаем, при случае.

Добавлено: 20 апр 2004, 18:35
vg
Woozy, ты прям как Vovka.

У него девиз - любишь кататься - люби и катайся.

Добавлено: 20 апр 2004, 19:45
ajkj3em
vg писал(а):W95/98/me имеют MSLU.
98 и ME - имеют, в 95 надо доставлять
Добавлено: 21 апр 2004, 12:05
vg
Platform SDK: Windows 9x Programming
Windows 95/98/Me General Limitations
Certain functions and classes of functions, such as for security and event logging, are not supported by Windows 95/98/Me. Windows 95/98/Me provides stub routines for these unsupported functions so that applications designed for other operating systems can run on Windows 95/98/Me without errors.
The extended error codes returned by the GetLastError function are not guaranteed to be the same in Windows 95/98/Me and Windows NT/Windows 2000. This difference applies to extended error codes generated by calls to window management, GDI, and system services functions. For example, the ActivateKeyboardLayout, GetKeyboardLayoutName, and UnloadKeyboardLayout functions do not support extended error code values; that is, you cannot retrieve errors for these functions by using the GetLastError function.
By design, functions that take string parameters can handle either Unicode (wide character) or ANSI strings. However, Windows 95/98/Me does not implement the Unicode (or wide character) version of most functions. With few exceptions, these functions are implemented as stubs that simply return an error value. However, Windows 95/98/Me does provide Unicode implementations of the following functions.
EnumResourceLanguages
EnumResourceNames
EnumResourceTypes
ExtTextOut
FindResource
FindResourceEx
GetCharWidth
GetCommandLine
GetTextExtentPoint
GetTextExtentPoint32
lstrcat (Windows 98/Me)
lstrcpy(Windows 98/Me)
lstrlen
MessageBox
MessageBoxEx
TextOut
...
Хорошо, хоть это есть
In addition, Windows 95/98/Me implements the MultiByteToWideChar and WideCharToMultiByte functions for converting strings to and from Unicode.
Добавлено: 21 апр 2004, 12:58
Lepsik
однозначно надо делать в юникоде. Вот у нас был мултибайт, а у японцев такой веселый язык , что в строке символ может выражаться переменным количеством байтов. Значит половина строковых функций работает самым неожиданным способом.
Так что юникод и std:string это то что доктор прописал
Добавлено: 21 апр 2004, 16:30
vg
Ok.

Thanks, men.
Рад вашим ответам. Тогда ворос по-существу флейма (keep down) - можно ли обеспечить, ну .... как бы "автоматическое" представление, при вводе строк UNICODE в строковые константы.

Предполагается, что мы используем в IDE VS 7.0, или BCB++6.0 (как минимум).
Ну, типа печатаем себе и печатаем поэтический C-код. Печатаем, например, _TEXT(" а не пойти бы тебе, vg, ....");
Но.

Keep down. Строка-то будет "широкой" (и к стати, вы знаете, что при определённых условиях будет компилироваться, как UNICODE? Точно говорю...

).
Да вот будет ли это строка UNICODE в общем случае? Типа компильнули и потешили своё менталити (не все присутствующие, конечно) грязными словами, порочащими мою драгоценную особу

Как думаете, увидите вы ругательство мене, или нет
Для того, чтобы не быть скучным

, вот фрагмент кода. Что будет напечатано в окне?
Код: Выделить всё
//---------------------------------------------------------------------------
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
…
switch (message) {
case WM_CREATE:
WndProc_OnCreateToolBar(hWnd);
break;
case WM_PAINT:
GetClientRect(Tb.m_hWndToolBar, &Rect);
hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd,&Rect);
DrawText (hdc, _T(" а не пойти бы тебе, vg, ....") , -1, &Rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hWnd, &ps);
break;
…
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
Добавлено: 21 апр 2004, 16:33
vg
Да, забыл. Ну, разумеется мы шо-то впечатали в директивы компиллера - или #define UNICODE,
или установили соответствующие опции для проекта (комбобоксик использовали в визарде):lol:
Добавлено: 23 апр 2004, 11:35
vg
Ну, кто-нибудь может толком объяснить ,
почему и когда это может корректно работать и отображать русские символы без использования MultiByteToWideChar:
DrawText (hdc, _T(" а не пойти бы тебе, vg, ....") , -1, &Rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);