-
Dimaxx, ты бы выложил минимальную процедурку, которая делает что надо. Может быть, где-то с указателями на буфер и размером данных напутал.
-
>> а как то отладчиком реально поймать? или тулзами типа madExcept? По идее при АВ выдается адрес исключения. Надо по нему прыгнуть в код и увидеть где произошло исключение. >> ты бы выложил минимальную процедурку, которая делает что надо. Может быть, где-то с указателями на буфер и размером данных напутал. Я ж говорю - дельфевый выполняет ту же операцию без проблем. Размеры файлов все известны - они в виде списка типа "имя-размер": SomeDir/SomeFile.dat 12345 Сами файлы все слиты один за одним в один огромный файл без заголовков. По сути различия только в коде со Stream. В выходные постараюсь найти код и опробовать, я уже не помню что и как делал.
-
Насчёт Stream. Адаптировал на КОЛ библиотеки NewAC и LZMA2 - может конечно я чёто неправильно делаю - смысл такой -
type PA=^TA; TA=object(TObj) ... FStream:PStream; ... // etc end;
Ну и соответственно процедуры типа ReadLZMA(...) SeekLZMA(...) etc в соответствующей структуре.
ДАК ВОТ - пишу прогу с использованием оригинальных классов LZMA и соответственно с моим объектом. Разница - 160К. НО!!! прога с классами быстрее раз в 5. всё делал вроде бы по закону. Такое же наблюдается с адаптационными объектами NewAC (при чтении и распаковке файлов, но там возможно ДЛЛ гонит... но в классах же не гонит... хз), и не только. Некоторые адаптации с сайта (DlUCL напр.) тоже тормозят в сравнении с классом.
Делал тестовый класс/объект с рандомным потоком - вроде всё норм... хз...
-
Не представляю что там может тормозить. Сколько там того объекта? Может где-то в часто вызываемые процедуры объект передаётся не по ссылке, а по значению? Всё равно, разница в скорости вряд-ли была бы больше 20%, хотя зависит от кода...
-
Вопрос по падение снимается. Нашел старый проект, скомпилировал - 2 гиговый файл "разложился" без проблем.
-
to:Netspirit Вот и я не могу понять. Оригинальный класс наследуется от TFileStream. Я же делаю объект от KOL.TObj, делаю поле Stream:PStream; делаю в конструкторе NewStream(ProcRec), где ProcRec - record ReadProc, WriteProc, SeekProc etc. end; соответственно перевожу методы из оригинального класса в функции Read,Write,Seek итд. Короче вроде всё правильно. О том что "вызываемые процедуры объект передаётся не по ссылке, а по значению" - не, я уже забыл когда на ВЦЛ писАл. Да и компилятор не позволит. ХЗ чё за фигня... Могу выложить модуль на справедливый народный суд. Модуль сколько весит - не помню, не от себя сейчас сижу. Чё-то около 2000-2500 строк.
-
Шрифт в КОЛ уже реально выбешивает. Задаешь шрифт (Tahoma, height=-11, он по умолчанию), в дизайнере все нормально. Компиляция, запуск. Какого хрена??? Шрифт, мать его, System (корявый растровый .fon), размер, мать его, 10. В unit1_1.inc про шрифт вообще ни строчки. Ничего не меняется, даже если в коде руками поставить имя шрифта (Tahoma) и высоту (-11). Ставишь -12 - шрифт Tahoma, высота -12 - все верно, но мне надо стандартный. Любое FontQuality не меняет ничего. Выставляешь fqProof - в unit1_1.inc ко всем контролам формы прописывается высота шрифта, но не та, что я задал (-11), а -13. Опять-таки WTF?? В итоге шрифт все же становится Tahoma, но размер неверный. И после возвращения FontQuality=fqDefault ничего не меняется, потому что весь unit1_1.inc испещрен FontHeight:=-13. Убрал руками все. Скомпилировал - шрифт опять System. То есть КОЛ игнорирует заданное и пихает свое. DefFont в KOL.pas установлен точно также - Tahoma, -11. Пишу руками в unit1_1.inc - FontHeight:=-11. Компилирую и все становится на свои места, но! После закрытия и открытия проекта файл unit1_1.inc перегенерируется заново и снова все через опу. Почему игнорит КОЛ - я хз. Имхо при записи кода создания формы в unit1_1.inc надо принудительно выставить параметры шрифта, либо искать где он гадит, если шрифт не задан и используется дефолтный. Далее: в dfm объект формы стоит первым. У всех контролов в dfm Font.FontHeight = -13. Откуда??? Я не задавал -13 вообще. С какого потолка оно взято? И почему KOL берет значения свойств из TForm, а не из TKOLForm??? Помогло только принудительное создание шрифта DefFont procedure TForm1.KOLForm1BeforeCreateWindow(Sender: PObj);
begin
DeleteObject(Form.Font.ReleaseHandle);
Form.Font.Assign(NewFont);
end;
-
Если вдруг интересно кому - то вырезал кучу старого хлама из KOL.pas (типа нерабочей Linux поддержки, "очень важной" поддержки делфи 2 и т.д). Cкинул на свн https://sourceforge.net/projects/kolmck/зы. возможно что отвалилось\сломалось...
-
http://clavier.link (язык AL-IV - АЛФОР): 18.05.2017 v0.62 Добавлена поддержка платформы Win32/Delphi/KOL (версия KOL 3.23) - на данный момент только не визуальной его части (работа продолжается).
-
Столкнулся с глюком TBitmap. Гружу 24-битное, преобразовываю дизерингом в 8-битное. Затем мне надо, чтобы размеры (если они меньше заданных) были подогнаны под один и тот же размер (добавляются поля черного). Так вот после увеличения только ширины картинки изображение становится 32-битным (с какого перепугу??). Если сначала увеличить высоту, а потом ширину, то изображение остается 8-битным.
-
> Vladimir Kladov © (17.05.17 21:15) [88]
регистрозависимость это дичь .... нет элементарной документации аля "хеловёрд" по спецификациям начать что то писать невозможно
-
Привет спецам! Помогите пжлст. Под андрюшу вышел бинарный транслятор x86 в ARM от программистов из Сколково, что писали нечто подобное под Эльбрус. В общем эти ребята в Play Market выложили свое творение - wine 1.9, работающий под андройдом на любом ARM устройстве. Там они его распространяют преимущественно для запуска старых игр. Называется ExaGear. И действительно, на нем работает куча программ. Но только не мои, написанные на delphi с применением библиотеки KOL. А так хотелось..... Вылетает даже минимальная программа, создающая пустую форму. Вот скрин https://s1.postimg.org/vkb1liaan/20170722_005204.jpgКомпилирую в delphi 6, запущенной в этой среде. Отладчик не ссылается ни на какой участок кода. Как узреть, что именно приводит к вылету?
-
по функции: function Extended2Str( E: Extended ): KOLString;
нужно кроме предвартельной проверки E на 0, еще добавить проверку на Infinity и NAN, иначе уйдет в бесконечный цикл.
-
Сделал для себя новый Format для КОЛ - старый слишком убог по функционалу. Абсолютно весь функционал вводить не стал, взял только самое распространенное.
function vsprintf_s(Buffer: PChar; BufferSize: integer; const Fmt: PChar; Args: pointer): integer; cdecl; external 'msvcrt.dll';
function Format(const Fmt: string; Params: array of const): string;
var
VA,Tmp: PByte;
Buffer: array[0..4095] of Char;
I,A,Size: integer;
D: double;
begin
FillChar(Buffer,sizeof(Buffer),0);
if High(Params)>=0 then
begin
Size:=0;
for I:=0 to High(Params) do
with Params[I] do
case VType of
vtInteger: Inc(Size,sizeof(Integer));
vtChar: Inc(Size,sizeof(Char));
vtWideChar: Inc(Size,sizeof(WideChar));
vtPChar,vtAnsiString,vtPWideChar,vtWideString,vtPointer: Inc(Size,sizeof(Pointer));
vtExtended: Inc(Size,sizeof(Double));
end;
GetMem(VA,Size);
FillChar(VA^,Size,0);
Tmp:=VA;
for I:=0 to High(Params) do
begin
A:=sizeof(Pointer);
with Params[I] do
case VType of
vtInteger:
begin
A:=sizeof(Integer);
PInteger(Tmp)^:=VInteger;
end;
vtChar:
begin
A:=sizeof(Char);
PChar(Tmp)^:=VChar;
end;
vtPChar: PPointer(Tmp)^:=VPChar;
vtAnsiString: PPointer(Tmp)^:=VString;
vtWideChar:
begin
A:=sizeof(WideChar);
PWideChar(Tmp)^:=VWideChar;
end;
vtPWideChar: PPointer(Tmp)^:=VPWideChar;
vtWideString: PPointer(Tmp)^:=VWideString;
vtExtended:
begin
A:=sizeof(Double);
D:=VExtended^;
PDouble(Tmp)^:=D;
end;
end;
Inc(Tmp,A);
end;
I:=vsprintf_s(@Buffer[0],4096,PChar(Fmt),VA);
if I>0 then
begin
SetLength(Result,I);
Result:=Buffer;
end;
if VA<>nil then FreeMem(VA);
end;
end;
Все символы описаны в https://msdn.microsoft.com/ru-ru/library/hf4y5e3w.aspx
-
> L`Autour (01.08.17 10:27) [92] > по функции:function Extended2Str( E: Extended ): KOLString; > нужно кроме предвартельной проверки E на 0, еще добавить > проверку на Infinity и NAN, иначе уйдет в бесконечный цикл. >
незнай как там с проверками, но Extended2Str в 6 раз!!! медленней стандартной Str и в 4.5 раз FloatToStr из сисутилсов
-
>Сделал для себя новый Format для КОЛ - старый слишком убог по функционалу.
А в чем убогость то заключается? Вроде основное все было..
>незнай как там с проверками, но Extended2Str в 6 раз!!! медленней стандартной Str и в 4.5 раз FloatToStr из сисутилсов
Получается у Extended2Str нет никаких преимуществ перед стандартной Str?
-
> Получается у Extended2Str нет никаких преимуществ перед > стандартной Str?
нету, так же как и у FloatToSt,IntToStr,Int2Str
-
И как же KOLString, UNICODE_CTRLS?
-
> И как же KOLString, UNICODE_CTRLS?
а без разницы, Str в топе
-
>> А в чем убогость то заключается? Вроде основное все было.. Типа старые функции небезопасны. И старый Format не поддерживает и половины возможностей. Насколько помню, плавающий формат он не переваривал. Была доработка, но она криво отображала float.
|