Конференция "Прочее" » Какой великий смысл в использовании resourcestring вместо const ?
 
  • xayam © (14.08.08 10:42) [20]
    Игорь начал искать смысл. Ты на правильном пути. Что конечно не означает что дойдешь до конца этого пути))
  • DVM © (14.08.08 10:42) [21]

    > Игорь Шевченко ©   (14.08.08 09:56)

    Особой разницы нет кроме как в отличие от const, эти константы размещаются не в сегменте данных, а в ресурсах, а затем подгружаются оттуда по мере необходимости. Каждая такая константа на вид обычная строка. Но за каждой из них стоит структура:

       PResStringRec = ^TResStringRec;
       TResStringRec = packed record
          Module: ^Cardinal;
          Identifier: Integer;
       end;

  • Игорь Шевченко © (14.08.08 10:42) [22]
    Anatoly Podgoretsky ©   (14.08.08 10:36) [16]

    Я про работу с ресурсами несколько в курсе, но ни const, ни ресурсы в своп-файл не выкидываются никогда (за исключением запакованных файлов), так как и const и ресурсы находятся в EXE-файле (ну или в DLL).

    Я немножко о другом - я прекрасно понимаю, что вынос строковых констант в ресурсы есть механизм полезный, в частности, для локализации, я к тому, что механизм именно resourcestring мне представляется крайне неудобным.

    Мне бы хотелось строковые ресурсы в DLL собирать самостоятельно, вместе с другими ресурсами, битмапами, курсорами и прочими иконами. А если я объявлю resourcestring в программе и resourcestring в DLL у меня получится два набора ресурсов :)
  • Игорь Шевченко © (14.08.08 10:43) [23]
    DVM ©   (14.08.08 10:42) [21]


    >
    > Особой разницы нет кроме как в отличие от const, эти константы
    > размещаются не в сегменте данных, а в ресурсах, а затем
    > подгружаются оттуда по мере необходимости. Каждая такая
    > константа на вид обычная строка. Но за каждой из них стоит
    > структура:
    >
    >    PResStringRec = ^TResStringRec;
    >    TResStringRec = packed record
    >       Module: ^Cardinal;
    >       Identifier: Integer;
    >    end;


    Я в курсе, спасибо. Я хочу понять, в чем преимущества
  • oldman © (14.08.08 10:49) [24]

    > Игорь Шевченко ©   (14.08.08 10:43) [23]
    > Я хочу понять, в чем преимущества


    А кто сказал, что они есть?
  • Игорь Шевченко © (14.08.08 11:00) [25]

    > А кто сказал, что они есть?


    Очевидно Borland
  • oldman © (14.08.08 11:04) [26]

    > Игорь Шевченко ©   (14.08.08 11:00) [25]
    > Очевидно Borland


    Судя по ссылке в [0], это сказал DVM ©.
    Анатолий вот еще пытается найти какие-то плюсы.
    И все.
    Про Borland поясни.
  • turbouser © (14.08.08 11:05) [27]
    If there is no resourcestring section in your code, the refactoring engine creates one following either the implementation keyword or the uses list.


    :-() а зачем?
  • Игорь Шевченко © (14.08.08 11:15) [28]

    > :-() а зачем?


    есть такой вид рефакторинга - замена строкового литерала на resourcestring.
    Удобно, чтобы явные литералы в коде не присутствовали.
  • turbouser © (14.08.08 11:28) [29]

    > Игорь Шевченко ©   (14.08.08 11:15) [28]

    И зачем? Чем удобнее? Почему таки не const?
    А уж об автоматизме сего промолчу :-х
  • Игорь Шевченко © (14.08.08 11:32) [30]

    > И зачем? Чем удобнее?


    отсутствие литералов оно всяко удобнее.


    > Почему таки не const?


    вот не знаю :)
  • Anatoly Podgoretsky © (14.08.08 12:07) [31]
    > Игорь Шевченко  (14.08.2008 10:37:17)  [17]

    А не ты говорил про ITE - это таже самая технология - ресурсные ДЛЛ
  • Anatoly Podgoretsky © (14.08.08 12:11) [32]
    > Игорь Шевченко  (14.08.2008 10:42:22)  [22]

    Ну тут Борланд пошел своим путем, сделал так, что бы разницы в коде не было, в отличии от использования чистых строковых ресурсов.

    Насчет самостоятельной сборки - этого у тебя никто не отнимал, resourcestring автоматизирует не только создание ресурса, но и его использования, в файле же обычный String Table
  • Anatoly Podgoretsky © (14.08.08 12:12) [33]
    > Игорь Шевченко  (14.08.2008 10:43:23)  [23]

    Читай два сообщения выше, преимущество для Дельфи в автоматизации работы, Дельфи скрывает всю кухню.
  • Anatoly Podgoretsky © (14.08.08 12:14) [34]
    > oldman  (14.08.2008 11:04:26)  [26]

    Мой ответ Игорю, также и тебе. Локализация между прочим тут ни причем, она делается и другими механизмами. Просто ITE знает и про формы и про resourcestring и про ДЛЛ, много про что знает и предоставляет механизм, но это не из=за resourcestring - оно же преобразовывается в StringTable
  • Anatoly Podgoretsky © (14.08.08 12:17) [35]
    > Игорь Шевченко  (14.08.2008 11:15:28)  [28]

    Явные литералы худшее зло.

    Явный литерал (HardCoded) -> Const -> resource (resourcestring - спецподдержка для строк)
  • Anatoly Podgoretsky © (14.08.08 12:19) [36]

    > И зачем? Чем удобнее? Почему таки не const?

    Для строк нет смысла писать const - поскольку resourcestring абсолютно прозрачен.

    const
      S1 = 'abc';
    resourcestring
      S1 = 'abc';

    S := S1;

  • Игорь Шевченко © (14.08.08 12:20) [37]
    Anatoly Podgoretsky ©   (14.08.08 12:11) [32]


    > Насчет самостоятельной сборки - этого у тебя никто не отнимал,
    >  resourcestring автоматизирует не только создание ресурса,
    >  но и его использования, в файле же обычный String Table


    Вот у меня есть задача локализации.

    Я пишу

    unit langconsts;
    interface

    resourcestring
     SYes = 'Да';
     SNo = 'Нет';

    end.

    для другого языка я пишу

    unit langconsts;
    interface

    resourcestring
     SYes = 'Yes';
     SNo = 'No';

    end.

    Хочу сделать две DLL для ресурсов на русском и английском языках.

    1. Какой юнит я должен вставлять в приложение ?
    2. Как я должен использовать идентификаторы в программе, чтобы ресурсные строки загружались из DLL ?
    3. Будут ли соответствовать идентификаторы строк в приложении и в DLL ?
    4. Я хочу язык приложения определять самостоятельно, не используя настройки Windows. Как ?
  • Anatoly Podgoretsky © (14.08.08 12:32) [38]
    > Игорь Шевченко  (14.08.2008 12:20:37)  [37]

    1. Какой юнит я должен вставлять в приложение ?
    Любой, в Дельфи обычно выбирается один базовый язык, на нем делается интерфейс, потом с помощью ITE создаются языковые файлы, если язык не находится, то используется ресурс не из ДЛЛ, а из программы (язык по умолчанию).

    2. Как я должен использовать идентификаторы в программе, чтобы ресурсные строки загружались из DLL ?
    Не знаю, не интересовался. Но идентификаторы могут быть любые. В Дельфи этот процесс как создание ИД для идентификаторов, так и использования ресурса по его имени автоматизировано. Но я уже ответил, в Дельфи S := S1; и синтаксис использования одинаков и для const и для resourcestring. Не в дельфи это все надо делать ручками, создавать ресурс, создавать файл определений, самостоятельно загружать строки из ресурса.

    3. Будут ли соответствовать идентификаторы строк в приложении и в DLL ?
    Идентификаторы не нужны, нужны ИД из StringTable и они должны быть одинаковы в приложении и во всех ресурсных ДЛЛ, ITE это обеспечивает.

    4. Я хочу язык приложения определять самостоятельно, не используя настройки Windows. Как ?
    Я тебя уже посылал на свою страницу, ну не лезть же мне самому в проект и смотреть как именно я там реализовал, а по памяти я не помню. Учти, что у Борланда своя поддержка, отличающаяся от Микрософт. Но в кратче нужны несколько записей в реестре, а сама поддержка встроена в код.

    В ITE все продумано, но к нему надо привыкнуть, ну а это осуществляется с помощью пары матюгов, да и ITE сильно улучшили по сравнению с первыми версиями, где матюгов надо было три.
  • Игорь Шевченко © (14.08.08 13:56) [39]
    Anatoly Podgoretsky ©   (14.08.08 12:32) [38]


    > В ITE все продумано, но к нему надо привыкнуть,


    Я использовал ITE несколько лет назад, потом оставшееся время плевался.

    ITE может быть хорошо использовать для готового более-менее неизменного проекта, а для реального, то есть, достаточно часто и интенсивно меняющегося использовать ITE получится только с заклинаниями "твой кролик написал".

    То, что сама поддержка встроена в код, я в курсе, но ITE использовать не хочу, потому как неудобно.


    > Не в дельфи это все надо делать ручками, создавать ресурс,
    >  создавать файл определений, самостоятельно загружать строки
    > из ресурса.


    Собственно это можно и в Delphi делать, и, собственно, делается. Немного дольше на начальном этапе получается, но при наличии генератора ресурсов вполне сопоставимо с затратами на время с ITE.
    Кроме того, я могу попросить стороннего переводчика создать .rc файл, а вот просить его же поработать с ITE я, увы, не могу :)
 
Конференция "Прочее" » Какой великий смысл в использовании resourcestring вместо const ?
Есть новые Нет новых   [134439   +53][b:0][p:0.001]