powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / stack overflow when LoadFromStream
10 сообщений из 10, страница 1 из 1
stack overflow when LoadFromStream
    #39455058
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В интернете нашёл исходник модуля для разграничения прав доступа.
( http://www.interface.ru/home.asp?artId=17969)

FormCreate процедура загружает права доступа из rights.txt файла:
https://mega.nz/#!PclAVRzL!Sap6M1-d2su6rigyCWaBAfl224BlBgW88LsI0oAYcxo


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure TRightsForm.FormCreate(Sender: TObject);
    var f: TResourceStream;
    begin
      mode := 1;
    // загружаем данные о правилах из ресурса.
      f := TResourceStream.create(Hinstance, 'rigths',  RT_RCDATA));
      try
        LoadFromStream(f);
      finally
        f.free;
      end;}
    {$IFDEF isadmin}
      RightsView.PopupMenu := PopupMenu1;
    {$ENDIF
    end;



В папке проекта есть "rights.txt" файл. В Delphi 10.1 berlin создаю "rights.rc" файл, {$R 'rigths.res' 'rigths.rc'} появляется в project1.dpr, проект компилируется но при выполнении оператор LoadFromStream(f) выводит ощибку stackoverflow. При этом в RT_RCDATA " "

Ссылка на архив
...
Рейтинг: 0 / 0
stack overflow when LoadFromStream
    #39455063
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi159,

А зачем ты заставляешь уже созданную форму загружаться из ресурса, причем в качестве ресурса ты форме подпихиваешь файл в незнамо каком формате?
...
Рейтинг: 0 / 0
stack overflow when LoadFromStream
    #39455318
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster,
на несколько минут программа заработала и потом вдруг stackoverflow.
Вот код процедуры LoadFromStream:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
procedure TRightsForm.LoadFromStream(const T: Tstream; parent: Ttreenode = nil; count: word = 0);
var x, y: integer;
  n: Ttreenode;

  function loadnode: word;
  var s, s1: string;
    len: byte;
    dt: TrightData;
  begin
    t.read(len, 1); if len > 1 then begin setlength(s, len); t.read(s[1], len); end;
    t.read(len, 1); if len > 1 then begin setlength(s1, len); t.read(s1[1], len); end;
    t.read(result, 2);
    if parent = nil then n := RightsView.Items.AddFirst(nil, s) else
      n := RightsView.Items.AddChild(parent, s);
    dt := TrightData.Create(s1);
    if dt.IsNull then n.ImageIndex := 2 else n.ImageIndex := abs(mode - 1);
    n.SelectedIndex := n.ImageIndex;
    n.Data := dt;
  end;

begin
  RightsView.Items.BeginUpdate;
  if parent = nil then begin
    repeat
      y := loadnode; if y > 0 then LoadFromStream(T, n, y);
    until t.Position >= t.Size;
  end else
  begin
    for x := 0 to count - 1 do begin y := loadnode; if y > 0 then LoadFromStream(T, n, y); end;
  end;
  RightsView.Items.EndUpdate;
end;
...
Рейтинг: 0 / 0
stack overflow when LoadFromStream
    #39455347
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi159,

почему не можете отладить код?
...
Рейтинг: 0 / 0
stack overflow when LoadFromStream
    #39455441
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldmi45Delphi159,

почему не можете отладить код?
вот поэтому:
...
Рейтинг: 0 / 0
stack overflow when LoadFromStream
    #39455469
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi159,

string в Berlin юникодный. А какой в ресурсе?
...
Рейтинг: 0 / 0
stack overflow when LoadFromStream
    #39455479
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldmi45Delphi159,

string в Berlin юникодный. А какой в ресурсе?

в ресурсе записал только 'ABCD EFGH' и сохранил в utf-8 но всё равно никак...
...
Рейтинг: 0 / 0
stack overflow when LoadFromStream
    #39455656
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi159,

если в отладке такое показывается вместо строк, то строка или объект не инициализированы или уже были уничтожены.
...
Рейтинг: 0 / 0
stack overflow when LoadFromStream
    #39455667
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi,

Нет. Он прочитал из стрима ансишную строку и записал ее в юникодную
...
Рейтинг: 0 / 0
stack overflow when LoadFromStream
    #39455679
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

нет, в представленном скриншоте отображается мусор. Если посмотреть на код и оригинальные данные, то они записаны в бинарном формате с ДЛИНОЙ. Т.е. сначала идет байт с длиной, а потом все содержимое строки. У автора этого байта нет -- он зафигачил сразу текст, и длина берется из кода символа A (или первого байта метки utf-8, если он и ее умудрился сохранить в текстовом редакторе). Эта длина, естественно, намного больше реальных данных -- поэтому при выставлении размера строки и чтении -- строка вначале чем-то заполяется (может теми самыми анси-символами из utf-байтов), а остальная часть является мусором из памяти -- что и видно на экране.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / stack overflow when LoadFromStream
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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