OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 11 Декабрь, 2018 23:43

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Баг в DevPacker'е?
СообщениеДобавлено: Четверг, 03 Апрель, 2014 00:34 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 198
Откуда: Украина, Днепропетровская обл.
По-моему я нашёл баг в DevPacker'е. Проявляется так. Скачиваем подсистему для раскраски синтаксиса Master (адаптированную мной для BlackBox 1.6).

Лучше всего экспериментировать в Красноярской сборке Ивана Денисова, т.к. она имеет возможность автоматизации процесса упаковывания всей сборки в EXE, для чего в ней присутствует модуль RedSubs с командой PackAllToExe (в меню: Red -> Упаковать всё в EXE).

Распакуем Master в сборку Red, запустим, появится новый пункт меню — Мастер. Теперь собираем всю сборку в один EXE, переместим этот EXE'шник в другую папку (чтобы исключить чтение не из упакованной ФС, а извне) и запустим. Теперь при попытке раскрасить синтаксис:

Мастер -> Раскрасить активный документ

стабильно получается такое сообщение в логе:

Не найден файл Master/Rsrc/DefaultSyntaxAttributes.syn

Хотя, разумеется, этот файл пакуется, я проверил: EXE'шник становится больше на примерно его размер. Но что подозрительно — в теле EXE'шника простым поиском строка DefaultSyntaxAttributes.syn не находится.

Читается этот файл процедурой MasterColors.Init, вызываемой из инициализатора модуля MasterColors. Выглядит она так:
Код:
    PROCEDURE Init;
        VAR file: Files.File;
    BEGIN
        file := Files.dir.Old(Files.dir.This("Master/Rsrc/"), "DefaultSyntaxAttributes.syn", FALSE);
        IF file # NIL THEN
            IntAttr(file);
            file.Close()
        ELSE
            StdLog.String("Не найден файл Master/Rsrc/DefaultSyntaxAttributes.syn");
            StdLog.Ln()
        END;
        MasterColorScanner.InitSyntaxAttributes(syntax);       
    END Init;
т.е. должна работать в EXE, собранном DevPacker'ом, потому как он эмулирует виртуальную файловую систему.

Мы уже пытались чуть-чуть разобраться с Иваном Кузьмицким, стало ясно, что проблема, скорее всего, в DevPacker'е, но где именно — надо рыть, на что лично у меня не хватает квалификации, поэтому и пишу. Посоветуйте что-нибудь. Спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Баг в DevPacker'е?
СообщениеДобавлено: Четверг, 03 Апрель, 2014 05:26 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
Возможно, есть ограничение на число символов в имени упакованного файла. Попробуйте поискать в EXE не имя файла целиком, а подстроку из него.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Баг в DevPacker'е?
СообщениеДобавлено: Четверг, 03 Апрель, 2014 10:07 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2538
Откуда: Россия, Ярославль
Не могу подтвердить баг.
Упаковываю Master в исполняемый файл, убираю подсистему из сборки ББ, потом запускаю его, иду в ObxFileTree, нахожу нужный файл и открываю его, вижу всякий мусор, который там и должен быть.

А вообще мне кажется, что модуль HostPackedFiles не позволяет открывать файлы в режиме Files.exclusive (константа FALSE). Поэтому и возвращает NIL в процитированном куске кода.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Баг в DevPacker'е?
СообщениеДобавлено: Четверг, 03 Апрель, 2014 10:12 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4487
Откуда: Россия, Орёл
Пётр Кушнир писал(а):
А вообще мне кажется, что модуль HostPackedFiles не позволяет открывать файлы в режиме Files.exclusive (константа FALSE). Поэтому и возвращает NIL в процитированном куске кода.
Так и есть --- упакованные файлы только читаются...

И хороший пример, что константы Files.shared, Files.exclusive не просто так заведены. Пётр разглядел Files.exclusive в FALSE. А сколько народу, включая меня, пропустило?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Баг в DevPacker'е?
СообщениеДобавлено: Четверг, 03 Апрель, 2014 14:00 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2538
Откуда: Россия, Ярославль
Вспомнил, что уже сталкивался с проблемой некорректной работы компонентов в режиме только чтения.
Проблему решил обычным способом.
Цитата:
Код:
(* копирует файл из образа наружу и открывает для записи *)
   PROCEDURE (d: Directory) Old (loc: Files.Locator; name: Files.Name; shared: BOOLEAN): Files.File;
      VAR f, f0: Files.File; rd: Files.Reader; wr: Files.Writer; x: BYTE;
   BEGIN
      f := orgdir.Old(loc, name, shared);
      IF f = NIL THEN
         f := packedDir.Old(loc, name, Files.shared);
         IF (f#NIL) & ~shared THEN
            f0:=orgdir.New(loc, Files.dontAsk);
            IF f0#NIL THEN
               rd:=f.NewReader(NIL); rd.SetPos(0);
               wr:=f0.NewWriter(NIL);
               REPEAT
                  rd.ReadByte(x); wr.WriteByte(x);
               UNTIL rd.eof;
               f0.Register(name$, '', Files.dontAsk, loc.res);
               IF loc.res=0 THEN
                  f0.Close;
                  f := orgdir.Old(loc, name, shared);
               ELSE f:=NIL END;
            ELSE f:=NIL END
         END;
      END;
      RETURN f
   END Old;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Баг в DevPacker'е?
СообщениеДобавлено: Четверг, 03 Апрель, 2014 14:04 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 198
Откуда: Украина, Днепропетровская обл.
Что ж, Пётр прав, действительно, всё так. Надо придумать как адаптировать Master к работе в упакованном режиме.

Всем спасибо.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2018, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB