Новости:

01.01.2017: Релиз испанской версии Naruto - Ninja Council (GBA)
02.12.2016: Добавлена документация по Kruptar 7
09.10.2015: Обновление перевода игры Battletoads (NES) [версия 1.3]
22.01.2015: Kruptar Open Source
18.10.2014: Релиз обновлённой русской версии Castlevania - Dawn of Sorrow (GBA) от Owls Group
01.05.2014: Релиз русской версии Taiyou no Yuusha Firebird (NES)
24.06.2012: Добавлена доработанная документация и инструкция
26.05.2012: Обновление ORITON [версия 2.050]
11.05.2012: Обновление ORITON [версия 2.048]
11.03.2012: Обновление Kruptar 7 [версия 7.1.1.17]
29.01.2012: Обновление LZ77Restructor 2 [версия 1.02]
01.01.2012: Релиз русской версии Drill Dozer (GBA)

Подробнее на страничке новостей.
Ознакомьтесь с правилами нашего форума.

Главное меню

Kruptar

Автор Alex, 20 февраля 2009, 14:02:55

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

Oraculum

При компиляции любого плагина в Delphi XE2 в Круптаре часто выскакивает "Invalid pointer operation".
Из Needs.pas:

destructor TTextStrings.Done;
var
N: PTextString;
begin
while Root <> NIL do
begin
  N := Root^.Next;
  Root^.Str := '';
  Dispose(Root);
  Root := N;
end;
Count := 0;
Cur := NIL;
end;

Поменял из интереса "Root <> NIL" на "Root^.Next <> NIL", ошибка не выскакивает, но, естественно, утекает память.
Почему так?  *SCRATCH*

Hatsuyuki

Тут не про эту ситуацию?
Цитата: http://delphi.about.com/od/objectpascalide/l/aa103003b.htmThe "Invalid pointer operation" exception only occurs when a module attempts to free the last allocated block of another module's free list, and, failing to recognize an invalid element, attempts to merge the free block with (what seems to be) a marker element (or might simply be garbage), which causes the error.
Otium sine litteris mors est et hominis vivi sepultura.

greengh0st

Сложности с написанием плагина? Блин я бы помог если бы хоть немного шарил((

Hatsuyuki

Может, ещё это поможет:
Цитата: http://edn.embarcadero.com/article/33416#28ChangedBehaviourFrom the above notes it should be clear that the new memory manager is less tolerant of heap corruption bugs caused by the application. The upside to this is that this should make it easier to catch bugs during the development cycle. The downside being that it could make life more frustrating for customers having to use an application containing such bugs.

The old memory manager that was used by Delphi 2005 (and earlier Delphi versions) is available on CodeCentral in the form of a replacement memory manager module. This module may be useful in comparing the performance of the old and new memory managers, and can also be used in cases where the behaviour of the old memory manager is desired above the behavior of the new one.
Можно старый менеджер памяти попробовать, если не хочется возиться с поиском возможного бага ::)

Цитата: greengh0st от 26 октября 2013, 17:45:13Сложности с написанием плагина? Блин я бы помог если бы хоть немного шарил((
После более внимательного прочтения поста Оракулума мне кажется, что сложности с миграцией на новую версию ;)
Otium sine litteris mors est et hominis vivi sepultura.

Oraculum

Цитата: Hatsuyuki от 26 октября 2013, 17:55:34From the above notes it should be clear that the new memory manager is less tolerant of heap corruption bugs caused by the application.
Склоняюсь более к этому, т.к.
Цитата: Oraculum от 26 октября 2013, 16:42:28Поменял из интереса "Root <> NIL" на "Root^.Next <> NIL", ошибка не выскакивает, но, естественно, утекает память.

Цитата: Hatsuyuki от 26 октября 2013, 17:55:34Можно старый менеджер памяти попробовать, если не хочется возиться с поиском возможного бага ::)
Не хочу возиться с пробованием старого менеджера. :D

[Дата добавления: 26 октября 2013, 18:38:16]

Дружно проверяем код на возможные ошибки :) :
PTextStrings = ^TTextStrings;
TTextStrings = object
  Root, Cur: PTextString;
  Count: LongInt;
  constructor Init;
  function Add: PTextString;
  function Get(I: LongInt): PTextString;
  destructor Done;
end;

constructor TTextStrings.Init;
begin
Root := NIL;
Cur := NIL;
Count := 0;
end;

function TTextStrings.Add: PTextString;
begin
New(Result);
If Root = NIL then Root := Result Else Cur^.Next := Result;
Cur := Result;
Inc(Count);
Result^.Str := '';
Result^.Next := NIL;
end;

destructor TTextStrings.Done;
var
N: PTextString;
begin
while Root <> NIL do
begin
  N := Root^.Next;
  Root^.Str := '';
  Dispose(Root);
  Root := N;
end;
Count := 0;
Cur := NIL;
end;

Hatsuyuki

После ещё более внимательного чтения понял, что дело, похоже, не в коде Оракулума :-[
Цитата: Oraculum от 26 октября 2013, 16:42:28любого плагина
И сам Круптар, и стандартные плагины написаны Джинни. Тугодум я ;D

[Дата добавления: 26 октября 2013, 18:42:21]

Цитата: Oraculum от 26 октября 2013, 18:26:36Дружно проверяем код на возможные ошибки
А ошибка точно локализована там? Может, она в исходниках Круптара, которые всем подряд не дают :P
Otium sine litteris mors est et hominis vivi sepultura.

Oraculum

Цитата: Hatsuyuki от 26 октября 2013, 18:40:25
Цитата: Oraculum от 26 октября 2013, 18:26:36Дружно проверяем код на возможные ошибки
А ошибка точно локализована там? Может, она в исходниках Круптара, которые всем подряд не дают :P
Я и не писал, что она там. Я написал: "Дружно проверяем код на возможные ошибки".

greengh0st

И чего, чего, чего готов!!!!))))????

German

Просмотрел. Ошибок в синтаксисе не нашёл. Так что ошибка наверное где-то в логике, но я не вижу  :)

Hatsuyuki

Может, проблема в том, что делается Dispose конечного элемента в тот момент, когда на него ещё указывает Cur? Может, так делать запретили, чтобы было меньше ошибок?
Otium sine litteris mors est et hominis vivi sepultura.

Oraculum

Цитата: Hatsuyuki от 26 октября 2013, 23:18:14Может, проблема в том, что делается Dispose конечного элемента в тот момент, когда на него ещё указывает Cur? Может, так делать запретили, чтобы было меньше ошибок?
Не помогло.

Качаю Delphi 7. *F_SMOKE*

Hatsuyuki

Жаль, что не помогло. Больше в приведённом коде ничего усмотреть не могу. Да и не мог Джинни накосячить в таком простом месте, наверное. А ты и Круптар пересобирал в новой версии или только плагины? :)
Otium sine litteris mors est et hominis vivi sepultura.

Oraculum

Цитата: Hatsuyuki от 27 октября 2013, 01:54:29А ты и Круптар пересобирал в новой версии или только плагины? :)
Исходников Круптара у меня нет. Только плагин NULL и переписанный мной под FM3 плагин NULL.

Hatsuyuki

А библиотеки, собранные в новых версиях, часто совместимы с приложениями, собранными в старых? Я с такими ситуациями не сталкивался, поэтому интересно узнать на будущее :)

Думал, что это Трикстер согласился с ФМ3 помочь. Всё оказалось гораздо проще. Закабалили нас ;D
Otium sine litteris mors est et hominis vivi sepultura.

greengh0st

Не он вроде не умеет писать плагины. Хотя я могу сильно ошибаться, но он редко появляется, а какой хакер)))

Джинни

Лучше взять старый менеджер памяти, я думаю.

Hatsuyuki

Цитата: greengh0st от 28 октября 2013, 00:51:14Не он вроде не умеет писать плагины. Хотя я могу сильно ошибаться, но он редко появляется, а какой хакер)))
Ну, библиотеку на Delphi Трикстер в состоянии написать, полагаю. Именно Круптар он, может, и не разбирал :)

Джинни, очень удачно в Круптаре используется моноширинный шрифт. Сейчас выравниваю пробелами и не надо каждый скрин проверять. Сам бы, наверное, долго до такого додумывался *F_COOL*



Может быть, у тебя уже спрашивали про следующую возможность. В Notepad++, например, отображается количество выделенных байтов. По-моему, было бы здорово, если бы в Круптаре отображалось количество выделенных символов. Если бы развитие Круптара продолжилось, то эта фича не была бы добавлена из-за:
а) сильного влияния на быстродействие?
б) сложности имплементации?
в) вредности? ;D

Otium sine litteris mors est et hominis vivi sepultura.

greengh0st

Да сам пользуюсь таким блокнотом и там это удобно очень.

Hatsuyuki

Прочитал, что в Notepad++ 6.4.4 изменили способ подсчёта. Те, кому нужны символы, а не байты, могут обновиться ;)
Цитата: http://notepad-plus-plus.org/download/v6.4.4.htmlChange behaviour: statusbar reports the number of selected characters instead of number of bytes now.

[Дата добавления: 28 октября 2013, 22:19:16]

Вообще, в Notepad++ можно вывести всё сразу, но для этого нужно каждый раз вызывать отдельное окно, что не так удобно: http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Statistics
Otium sine litteris mors est et hominis vivi sepultura.

greengh0st

И там не совсем удачный плагин орфографии.

Slam

Всем доброго времени суток. Начал писать плагин, для перевода, и появилась пара вопросов. Как получить символ из загруженной строки в плагине (именно символ который в текстовом файле, а не его выходной код из таблицы). И как записывать коды полученные из внешнего файла в выходной поток. Просто документации на Круптар почти нет, поэтому и вопросы. Если не сложно подскажите, пожалуйста.

Джинни

В плагине нет доступа к символам из таблицы. Можно декодировать исходные данные представив одни коды другими кодами. Потом программа транслирует коды в читабельный текст с помощью таблиц.
Как писать плагины, подробно рассказано здесь:
http://magicteam.net/?page=documents&show=Написание плагинов для Kruptar 7

Slam

Я уже понял, что нельзя получать символы в плагине, но спасибо за ответ. У меня теперь другая проблема, более труднорешаемая. Нужно немного изменить SeekSame, чтобы поиск велся не только одинаковых строк, но и частей строк (например одна строка "мама мыла раму", а вторая "мыла раму"). И по аналогии с оригинальным SeekSame строка не записывалась бы отдельно, а  высчитывался бы поитнер на вторую строку = длинна строки 1 минус длинна строки 2 плюс адрес начала строки 1. Решил изменить код Круптара и столкнулся с трудностями. Версия 7.2.1.30 компилируется, но там какая то беда с поинтерами, возможно из-за ошибки в строке procedure PointersSortActionUpdate(Sender: TObject), скрин в аттаче (1). А версия 7.1.1.24 не компилируется из-за отсутствия функции WideFileNameToAnsi, в каком то модуле, и еще пара ошибок в аттаче (2,3). Помогите, пожалуйста, исправить ошибки и скомпилировать, или может быть есть исходники, которые можно спокойно компилировать, наример Версий 7.1.1.10-7.1.1.17.

Джинни

Репозиторий обновлён. Теперь собирается на Delphi 7 без проблем. Нужно открыть Kruptar7.bpg собрать и установить компоненты TntUnicodeControls_D7, MyLib, KruptarComponentsD7, LocalizerControls.
Сборка на Delphi XE7 неправильно работает из-за нового формата строк, я думаю.

Slam

Теперь компилируется нормально, спасибо большое. Только вот Круптар в этой версии после пересчета строки записывает не по порядку, а в разнобой (адрес присваивается странно). Так и должно быть да?