Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.02.21;
Скачать: CL | DM;

Вниз

Особенности перевода проектов на Delphi 2009(10)   Найти похожие ветки 

 
Andjey   (2009-12-10 13:36) [0]

Подкиньте толковую статью про Юникод. Интересно, какие трудности могут возникнуть при переводе своих проектов на Delphi 2009(10) ? Или не все так страшно? Гуглешь дает какие то поверхностные объяснения юникода впринципе. Хотелось бы почитать про него применительно к проектам Delphi.


 
clickmaker ©   (2009-12-10 13:51) [1]

> какие трудности могут возникнуть при переводе своих проектов
> на Delphi 2009(10) ?

замена AnsiString на String (если нужно, конечно)
выискивать места, где делается допущение, что размер символа = 1 байту
ну и все в таком духе


 
@!!ex ©   (2009-12-10 13:57) [2]

Насколько знаю, достаточно по всему проекту пройтись с реплейсом string на AnsiString
и все.


 
Игорь Шевченко ©   (2009-12-10 13:57) [3]

А что, Embarcadero совсем ничего не пишет или еще один разучившийся пользоваться поиском ?


 
AntiUser   (2009-12-10 14:01) [4]

Бойтесь посетители ДМ! ИШ не в духе.


 
Dimka Maslov ©   (2009-12-10 14:10) [5]


> Насколько знаю, достаточно по всему проекту пройтись с реплейсом
> string на AnsiString
> и все


Действительно так, однако после этого начинается куча warningoв по поводу возможной потери данных при преобразованиях из юникода и в юникод. Лечится соотв. настройками.
И вообще мне лично показалось, что вся юникодовость Delphi 2009 - разводка, строки обычные, а при вызовах WinAPI строки неявно преобразуются в юникод и обратно.


 
clickmaker ©   (2009-12-10 14:18) [6]

> И вообще мне лично показалось, что вся юникодовость Delphi
> 2009 - разводка, строки обычные

SizeOf("обычная строка") = ?


 
clickmaker ©   (2009-12-10 14:20) [7]

хотя, что это я... 4 вернет


 
Кто б сомневался ©   (2009-12-10 14:24) [8]


> Насколько знаю, достаточно по всему проекту пройтись с реплейсом
> string на AnsiString
> и все.


Такое делать как раз не надо.
Лучше потратить день-два на просмотр всего кода. у меня вообще перевод занял около двух часов с D7 на D2009 проект среднего размера.


 
Кто б сомневался ©   (2009-12-10 14:25) [9]


> И вообще мне лично показалось, что вся юникодовость Delphi
> 2009 - разводка, строки обычные,


Показалось просто. Бывает.


 
Andjey   (2009-12-10 14:43) [10]

Что-то как-то [1] и [2] протеворечат друг другу. AnsiString --> String или String --> AnsiString ? Кто ошибся? А на толковую статью так никто и не укажет? Может у кого в личных архивах есть... Если только проблема в строковом преобразовании, то смысл было новую оболочку писать? Патч какой придумали и все. :)


> Кто б сомневался ©   (10.12.09 14:24) [8]
>Лучше потратить день-два на просмотр всего кода. у меня вообще перевод >занял около двух часов с D7 на D2009 проект среднего размера.

Так в чем конкретно заключался перевод?


 
clickmaker ©   (2009-12-10 15:11) [11]

> AnsiString --> String или String --> AnsiString ? Кто ошибся?

оба правы.
если нужно, чтобы проект стал полностью уникодным, нужно убрать случайно затесавшиеся AnsiString. Хотя, обычно их явно никто и не использует.
если нужно, чтобы проект не поддерживал уникод, заменить string на ansistring. Только нафуа тогда переходить на 2009?


 
Кто б сомневался ©   (2009-12-10 15:25) [12]


> Так в чем конкретно заключался перевод?


В тех конструкция где вы плотно работаете именно с ANSI строками .
типа
Move

var
  Count: Integer;
  Buf1, Buf2: array[0..255] of Char;
begin
  // Существующий код - неправильный, потому что string = UnicodeString
  Count := Length(Buf1);
  Move(Buf1, Buf2, Count);
 
  // Правильный код для Юникода
  Count := SizeOf(Buf1);                // <<-- Задание размера буфера в байтах
  Count := Length(Buf1) * SizeOf(Char); // <<-- Задание размера буфера в байтах
  Move(Buf1, Buf2, Count);
end;


Или FillChar если вы указывали констатнту (хотя я использую ZeroMemory для обнуления), либо если вы указывали символ.
В таком коде , или подобному ему
var
  Count: Integer;
  Buffer: array[0..255] of Char;
begin
  // Существующий код - неправильный, потому что string = UnicodeString
  Count := Length(Buffer);
  FillChar(Buffer, Count, 0);
 
  // Правильный код для Юникода - любой из вариантов верный
  Count := SizeOf(Buffer);                // <<-- Задание размера буфера в байтах
  Count := Length(Buffer) * SizeOf(Char); // <<-- Задание размера буфера в байтах
  FillCha
r(Buffer, Count, 0);
end;

Здесь 3 статьи http://www.citforum.ru/programming/delphi/unicode/1.shtml


 
Кто б сомневался ©   (2009-12-10 15:29) [13]

А вообще вот это поюзайте:

http://lmgtfy.com/?q=%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4+%D0%BD%D0%B0+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4+delphi


 
@!!ex ©   (2009-12-10 15:43) [14]

> [11] clickmaker ©   (10.12.09 15:11)
> Только нафуа тогда переходить на 2009?

1) Не поддерживаются другие версии уже. Да и купить сложно
2) Далеко не везде и не всегда нужен юникод.


 
Кто б сомневался ©   (2009-12-10 16:29) [15]


> 2) Далеко не везде и не всегда нужен юникод.


Эм. Все API работает на юникоде.
Лучше сказать "не везде и не всегда нужен ANSI". Так будет правильней.


 
Кто б сомневался ©   (2009-12-10 16:32) [16]

А вообще народ переходите на 2009, я сначала тоже парился, переходить с D7 на 2009,  а теперь обратно не перейду. Там помимо юникода столько фич удобных, - для написания кода итп, что обратно не затянешь.
Проблем при переводе проектов с D7 нет, только мелочи которые быстро фиксятся. Да и программы быстрее работают от 2009, чем на младших версиях.


 
clickmaker ©   (2009-12-10 16:33) [17]

> Эм. Все API работает на юникоде

кроме 9х и МЕ


 
Кто б сомневался ©   (2009-12-10 16:40) [18]


> кроме 9х и МЕ


ну дык их и юзают еденицы. Программы уже не делают под них. Делают от W2k.


 
Andjey   (2009-12-10 16:56) [19]


> Кто б сомневался ©   (10.12.09 16:32) [16]
> А вообще народ переходите на 2009,

Да и фейс у него покрасимше будет.... говорили..... Что-то по поиску не могу найти типа Delphi2009 в картинках. Посмотреть на него хоть со стороны. Раньше в журналах Компьютер Пресс вроде рекламировали новые среды.


 
Eraser ©   (2009-12-10 17:35) [20]

> [0] Andjey   (10.12.09 13:36)


> Подкиньте толковую статью про Юникод.

http://edn.embarcadero.com/article/38446
http://edn.embarcadero.com/article/38582
http://edn.embarcadero.com/article/38703


 
Andjey   (2009-12-10 17:57) [21]


> Eraser ©   (10.12.09 17:35) [20]

Спасибо. Я первую часть уже читал.  А вот на 2 и 3 ссылок не нашел. Сейчас все пучком. Будем почитать. :)


 
Кто б сомневался ©   (2009-12-10 19:05) [22]


> Andjey
> Спасибо. Я первую часть уже читал.  А вот на 2 и 3 ссылок
> не нашел.


Я ж тебе давал ссылку в [12]. Там и на 2 и на 3 есть.
В трех соснах заблудился да еще и в гугле искать не умеешь..


 
Anatoly Podgoretsky ©   (2009-12-10 20:24) [23]

> Andjey  (10.12.2009 16:56:19)  [19]

Ну посмотри на Visual Studio


 
Andjey   (2009-12-10 20:36) [24]


> Кто б сомневался ©   (10.12.09 19:05) [22]
> Я ж тебе давал ссылку в [12]. Там и на 2 и на 3 есть.
> В трех соснах заблудился да еще и в гугле искать не умеешь.

Конечно же, спасибо. Я их видел, просто я не сразу среагировал. Было много открыто закладок в Опере после гугла. Кстати, ссылку анимированую прикольную ты выложил. :) . Я вкурсе что гугл сейчас так может делать.


 
turbouser ©   (2009-12-10 21:07) [25]

string на ansi заменять тоже надо с головой.. как и char на ansichar.. да и много тонкостей всяких может появиться.
вот как-то переводил я fr2.5 под D2010.. мда.. недели две точно ушло..



Страницы: 1 вся ветка

Текущий архив: 2010.02.21;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.013 c
15-1260708905
SergP
2009-12-13 15:55
2010.02.21
Как узнать Product key установленной винды XP


6-1212600148
Real
2008-06-04 21:22
2010.02.21
TWebBrowser - организовать preview html-кода


15-1260394219
Юрий
2009-12-10 00:30
2010.02.21
С днем рождения ! 10 декабря 2009 четверг


15-1260171051
12
2009-12-07 10:30
2010.02.21
Нашел книгу по администрированию MSSQL


15-1260350259
Сергей М.
2009-12-09 12:17
2010.02.21
Delphi for PHP