Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2011, 01:19   #31
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

veniside, спасибо за пример.
Только это что выходит - получается в dll необходимо все ресурсы дублировать в инициализируемой части? От этого никак не избавиться что ли?
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 22.02.2011, 01:26   #32
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

В смысле дублировать? Не дублировать, а переводить на другой язык.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 22.02.2011, 01:35   #33
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
В смысле дублировать?
Я имел ввиду вот что:
длл имеет вид:
Код:
library rus;

resourcestring
  a = 'rus_str_a';
  b = 'rus_str_b';

begin
  a;
  b;
end.
Все работает отлично.
Но в случае, если в секции инициализации не перечислить имена ресурсов, работать не будет:
Код:
library rus;

resourcestring
  a = 'rus_str_a';
  b = 'rus_str_b';

begin
// empty
end.
Или может я чего-то не понял?
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 22.02.2011, 02:15   #34
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

А, ну да, линкер, собака, их выкидывает. Можно строчку

Код:
s := a + b;
вынести в отдельный .inc файл, и подключать его через {$I ... } во всех ДЛЛ. Если список изменится, достаточно будет один раз .inc файл поменять.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 22.02.2011, 02:29   #35
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

О и ответик появился...правда я уже так и поступил был (через {$include} и inc) - осталось только автоматизировать сборку и готово...вобщем всем еще раз спасибо за ответы...
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 22.02.2011, 02:46   #36
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Фига вы извращенцы.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 22.02.2011, 03:42   #37
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

ггг, я сам не понял, зачем я это написал ) чисто по-приколу.

Да, можно patchStrings() сделать умнее, чтобы он смотрел, какие строки есть в подгружаемой ДЛЛ и патчил только их. Чтобы не перечислять все строки во втором параметре. Ну это потом, в версии 2.0 )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 22.02.2011, 13:00   #38
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Наверное проще использовать ITE

Если ITE сильно не охота, то проще поставить хук на LoadResString такого плана:

Код:
function LoadResStringHooked(ResStringRec: PResStringRec): string;
var
  Buffer: array [0..4095] of Char;
begin
  if ResStringRec = nil then Exit;
  if ResStringRec.Identifier < 64*1024 then
    SetString(Result, Buffer,
      LoadString(FindResourceHInstance(ResStringRec.Module^),
        ResStringRec.Identifier, Buffer, Length(Buffer)))
  else
    Result := PChar(ResStringRec.Identifier);

  GetPrivateProfileString('Translations', PChar(Result), PChar(Result), PChar(Buffer), Length(Buffer), PChar('russian.lng'));
  Result := Buffer;
end;
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 23.02.2011, 00:14   #39
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Можно попробовать и такой вариант...а вот ITE пожалуй нет...реализация его отвратительная (в плане удобства)...хотя может кому-то и нравится...

Кстати, а по выше приведенному коду такой вопрос появился:
условие
Код:
ResStringRec.Identifier < 64*1024
если оно выполняется, то ресурсная строка является нативной(т.е. та, что по умолчанию) иначе же ресурсная строка загружена из другого модуля. Правильно я понял или что-то другое имелось ввиду?
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 23.02.2011, 09:02   #40
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от spamer Посмотреть сообщение
реализация его отвратительная (в плане удобства)...хотя может кому-то и нравится...
Лолшто? Т.е. руками выписывать все идентификаторы в DLL, следить за порядком и правильностью назначения ID, убедиться, что их не выкидывает линкёр и не забывать руками же обновлять идентификаторы при изменениях в exe - это проще, чем нажать кнопочку Refresh all?

Я ж и говорю - извращенцы
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание TImage в Run-time mrbadge Помощь студентам 9 03.02.2011 22:48
Run-time error 13 olimpus Microsoft Office Excel 11 25.12.2010 22:49
Создание компонентов Run Time Serebah Общие вопросы Delphi 13 08.12.2010 22:02
Заполнение cxLookupComboBox в run time fake2 БД в Delphi 0 17.05.2010 08:31
ActionManager - работа в run - time chingiz Компоненты Delphi 0 10.10.2009 08:48