powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Максимальное количество resourcestring в модуле
6 сообщений из 6, страница 1 из 1
Максимальное количество resourcestring в модуле
    #40131787
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надысь отвалился перевод на английский в нашем проекте (D10.4.2). Причём не весь, а местами. После расследования выяснилась такая пролема. в System.pas есть такой код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function LoadResString(ResStringRec: PResStringRec): string;
var
  Buffer: array [0..4095] of Char;
begin
  if ResStringRec = nil then Exit;
  if Assigned(LoadResStringFunc) then
    Exit(LoadResStringFunc(ResStringRec));
  if ResStringRec.Identifier < 64*1024 then
    SetString(Result, Buffer,
      LoadString(FindResourceHInstance(ResStringRec.Module^),
        ResStringRec.Identifier, Buffer, Length(Buffer)))
  else
    Result := PChar(ResStringRec.Identifier);
end;



Из которого следует, что идентификаторов строки, больших чем 64*1024 быть не может. Но в drc файле, и в exe очевидно появились id больше. Конечно, тут можно написать свой вариант загрузки и я это решил. Однако же, почему такой лимит и откуда он взялся, кто-то в курсе?
...
Рейтинг: 0 / 0
Максимальное количество resourcestring в модуле
    #40131788
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пережиток прошлого ...
...
Рейтинг: 0 / 0
Максимальное количество resourcestring в модуле
    #40131789
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ладно. Спасибо за то, что можно документированную замену установить, а не упражняться с detour как раньше.
...
Рейтинг: 0 / 0
Максимальное количество resourcestring в модуле
    #40131879
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это область для отлова нулевых указателей.

Ну т.е.
Код: pascal
1.
Result := PChar(ResStringRec.Identifier)


это как бы указатель.

Соответственно, 0 - это nil, а от 0 до 64 Кб - это зарезервированная дырка для отлова nil. Поэтому если указатель указывает в область от 0 до 64 кб - то это, на самом деле, не указатель. А раз не указатель, то что? То это числовой идентификатор.
...
Рейтинг: 0 / 0
Максимальное количество resourcestring в модуле
    #40131891
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну по факту генерируются идентификаторы выше этого лимита. Да и вообще такой метод вызывает много вопросов, например откуда туда может попасть указатель, а не идентификатор
...
Рейтинг: 0 / 0
Максимальное количество resourcestring в модуле
    #40131903
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это типичная практика в старых API.

Например, тот же GetProcAddress может импортировать функцию по имени, а может - по номеру: GetProcAddress(Lib, PChar(5)) - импортирует функцию номер 5.
MSDN in lpProcName

The function or variable name, or the function's ordinal value. If this parameter is an ordinal value, it must be in the low-order word; the high-order word must be zero.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Максимальное количество resourcestring в модуле
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]