Вверх ↑
Этот топик читают: Гость
Ответов: 4621
Рейтинг: 746
#181: 2013-04-10 12:35:13 ЛС | профиль | цитата
Вот архив. Перечень изменений для FPC 2.6.0 по сравнению с оригинальной:

kol.pas
- ст. 34401: пофиксен баг с отображением первой вкладки TabControl

KOL_ansi.inc
- добавлены объявления некоторых типов и констант, которых не обнаружилось в модуле windows FPC 2.6.0
- изменен порядок объявления некоторых типов, так как не хотело компилировать
(подробнее - сравнением файлов в TotalCommander)

KOLDEF.INC
- ст. 225: добавлены некоторые дефайны для обратной совместимости с нашими компонентами

KOLGRushControls3.pas (ориг. KOLGRushControls.pas)
- файл переименован, чтобы не конфликтовать с текущим в папке ElementsDelphicode
- ст. 1984: обойдено использование функции KOL.Format, так как она выдавала ошибку в FPC 2.6.0

карма: 26

0
Ответов: 9906
Рейтинг: 351
#182: 2013-04-10 13:03:13 ЛС | профиль | цитата
Спасибо.
Беру тайм-аут на подумать
карма: 9

0
Ответов: 4621
Рейтинг: 746
#183: 2013-04-10 13:31:50 ЛС | профиль | цитата
Вау, спасибо. С нетерпением жду выводов. Я самые простые баги выловил, теперь остались посложнее - требуется помощь.
[offtop]Рекомендую всё же установить компилятор - там удобный инсталлятор, всё корректно устанавливается/удаляется, в системе не мусорит.[/offtop]
карма: 26

0
Ответов: 258
Рейтинг: -27
#184: 2013-05-19 19:53:14 ЛС | профиль | цитата
[b]---------------------------
Hiasm
---------------------------
RichEdit line insertion error.
---------------------------
ОК
---------------------------
[/b]

Что это значит? Я в FormatStr вставил текст размером 37 кбайт, и получил эту ошибку в подарок, как от ее избавится?

Только в этом hiasm'е ,в альтернативной сборке работает все
------------ Дoбавленo в 19.53:
Нашел в чем проблема, язык китайский не работал
карма: 0

0
Ответов: 4621
Рейтинг: 746
#185: 2013-07-09 11:37:12 ЛС | профиль | цитата
В первом посте обновлен компилятор:
- включены все промежуточные исправления;
- структура каталогов исходного кода приведена к оригинальному виду, чтобы можно было бы более просто сравнивать с оригиналом;
- пакет обновлен до SVN версии 1341;
- дефайн VER2_6 в коде компонентов заменен на FPC_NEW, чтобы не пришлось править при переходе на следующую версию компилятора;
- добавлен кросс-компилятор и необходимые модули для компиляции 64-битных приложений.

Если у вас уже был установлен этот компилятор - перед установкой обновленной версии удалите его, выполнив unins000.exe и удалите каталог FPC 2.6.0 (если останется).

Кто разбирается - могут поэкспериментировать с 64-битным компилятором. Вот архив с тестовым проектом. В него включены файлы KOL, грубо "обработанные напильником" для минимального функционирования под 64 бита.
В файлах compileXX.bat прописать путь к своей папке HiAsm.


карма: 26

0
Ответов: 1429
Рейтинг: 50
#186: 2013-07-17 18:40:19 ЛС | профиль | цитата
В 32 мой интерфейс на OpelGL работает без ошибок
Спасибо!

Netspirit писал(а):
Кто разбирается - могут поэкспериментировать с 64-битным

Жаль, что я не разбираюсь, надеюсь в этом направлении тоже будут шаги.

Я, как обезьяна с гранатой, попытался скомпилировать 64 бит, но без успеха:
Подготовка к сборке проекта...
Генерация кода целевого языка
Компоновка проекта...
Command line: ppcrossx64.exe "Drogram FilesHiAsmElementsdelphicodeProject43.dpr" -Fu"Drogram FilesHiAsm\compilerFPC 2.6.0units64" -FE"Drogram FilesHiAsm" -FU"Drogram FilesHiAsmElementsdelphicodeunits64" -Twin64
-vi
Target OS: Win64 for x64
Compiling Drogram FilesHiAsmElementsdelphicodeProject43.dpr
Compiling Drogram FilesHiAsmElementsdelphicodehiMainForm_8E37B50.pas
Compiling Drogram FilesHiAsmElementsdelphicodehiMainForm.pas
Compiling Drogram FilesHiAsmElementsdelphicodeShare.pas
Compiling Drogram FilesHiAsmElementsdelphicodeDebug.pas
Share.pas(1582,17) Error: Asm: [push reg32] invalid combination of opcode and operands
Share.pas(1583,17) Error: Asm: [push reg32] invalid combination of opcode and operands
Share.pas(1608,17) Error: Asm: [pop reg32] invalid combination of opcode and operands
Share.pas(1609,17) Error: Asm: [pop reg32] invalid combination of opcode and operands
Share.pas(1663,31) Error: Typecast has different size (4 -> 8) in assignment
Share.pas(2051,6) Error: Illegal type conversion: "AnsiString" to "LongWord"
Share.pas(2554,4) Fatal: There were 6 errors compiling module, stopping
Fatal: Compilation aborted
Сборка завершена.
карма: 0

0
Ответов: 4621
Рейтинг: 746
#187: 2013-07-17 18:46:55 ЛС | профиль | цитата
А пакет под 64 бита пока не дорабатывался - только основные модули и KOL, которая в тестовом проекте. То-есть, пока работает только тестовый проект.
А вот с пакетом такое дело: я не буду пока особых усилий прилагать для портирования его под 64 бита, так как основная идея - минимальные изменения для совместимости с официальным пакетом. Иначе будет сложно вести две версии пакета (либо одну, но будет много отличий от основного пакета). Вот если бы компилятор поддерживался официально - тогда можно отдельно вести только пакет для 64-битной версии.
карма: 26

0
Ответов: 1429
Рейтинг: 50
#188: 2013-07-17 18:57:04 ЛС | профиль | цитата
Netspirit, я обеими руками - за официальный FPC.
карма: 0

0
Ответов: 4621
Рейтинг: 746
#189: 2014-01-13 14:25:42 ЛС | профиль | цитата
Обновление компилятора

- компилятор обновлен до версии 2.6.2
- KOL обновлена до версии 3.21
- пакет обновлен до версии SVN 1534


64-битный компилятор по-умолчанию тоже устанавливается. Соответственно регистрируются два компилятора "FPCx32" и "FPCx64".
Переименована папка компилятора.
Для модулей используются отдельные каталоги в папке code, поэтому больше не требуется очищать папку units при переключении старого и нового FPC.

64-битная редакция KOL включена. В некоторые компоненты пакета включена 64-битная поддержка. Теперь 64-битные программы можно создавать в 2 клика. Прочие компоненты будут дорабатываться по мере необходимости.

Особых трудностей при переводе компонентов на 64 бита нет. Единственная проблема - вставки на ассемблере, в котором я недостаточно разбираюсь. Из-за этого в данный момент не работает MathParse и зависимый от него Math.

Там, где это возможно, для 64-битной версии ассемблерные вставки заменяются на паскалевские.

Можете удалить предыдущую версию компилятора с помощью compilerFPC 2.6.0unins000.exe


карма: 26

2
Голосовали:sаmakacd, MAV
Ответов: 1304
Рейтинг: 405
#190: 2014-01-13 19:29:11 ЛС | профиль | цитата
Netspirit, спасибо что продолжаешь проект. До сих пор с содроганием вспоминаю попытку использования многомерных массивов с компилятором delphi4. Да кстати об Авасте и о FPCx32, из двух десятков запущенных примеров срабатываний не было.
карма: 3

0
Ответов: 413
Рейтинг: 57
#191: 2014-01-13 20:37:24 ЛС | профиль | цитата
Netspirit, Переустановил и при попытке скомпилировать схему компилятором delphi выдало ошибку:

C:\Program Files\HiAsm_AltBuild\Elements\delphi\code\DropSourcek.pas(368) Error: Undeclared identifier: 'NativeInt'

C:\Program Files\HiAsm_AltBuild\Elements\delphi\code\DropSourcek.pas(1097) Error: Undeclared identifier: 'NativeInt'

C:\Program Files\HiAsm_AltBuild\Elements\delphi\code\hiDropFile.pas(5) Fatal: Could not compile used unit 'DropSourcek.pas'

На FPC скомпилировалось нормально. Попробовал скомпилировать используя старую папку Delphi - компилируется.
карма: 0

0
Ответов: 1304
Рейтинг: 405
#192: 2014-01-13 22:09:42 ЛС | профиль | цитата
Poputchik, в DropSourcek.pas заменил в NativeInt на Integer, компиляция успешна на FPCx32 и delphi но на FPCx64 вылазит ошибка. Подождём пока Netspirit увидит сообщение.
карма: 3

0
Ответов: 4621
Рейтинг: 746
#193: 2014-01-14 12:06:50 ЛС | профиль | цитата
Не обратил внимание, что DropSourcek.pas не использует модуль Share.pas, в котором объявлен тип NativeInt для Delphi.
Для исправления добавить Share в uses файла DropSourcek.pas.

Для разработчиков.

Тип NativeInt введен взамен типа Integer для случаев, когда данные, хранимые в Integer имеют размер 64 бита на 64-битной платформе и 32 бита на 32-битной (последнее подразумевалось по-умолчанию, когда платформа была только 32-битная).

В частности - к типу Integer раньше приводились все указатели для вычисления смещения. Теперь их нужно приводить к NativeInt. Многие типы данных Windows в 64-битной версии сменили размер с 32 на 64 бита (в частности - все хендлы). Если раньше для их хранения использовались переменные Integer, то сейчас нужно использовать NativeInt.

Тип NativeInt эквивалентен Integer в 32-битных программах, и Int64 - в 64-битных. Этот тип родной для нового FPC (и возможно новых Delphi), для старого FPC и Delphi он искусственно объявлен в Share.pas.

Больше информации об особенностях программирования под 64 бита - здесь. Там это описывается применительно к ассемблеру GoAsm, так что внимание стоит обращать только на общеплатформенные вещи.


карма: 26

0
Ответов: 1304
Рейтинг: 405
#194: 2014-01-14 19:29:21 ЛС | профиль | цитата
Netspirit писал(а):
Особых трудностей при переводе компонентов на 64 бита нет. Единственная проблема - вставки на ассемблере, в котором я недостаточно разбираюсь. Из-за этого в данный момент не работает MathParse и зависимый от него Math.

Netspirit, может попробовать использовать данную директиву

#pas
{$IFDEF ASM_VERSION}
код...
{$ENDIF ASM_VERSION}
далее примерчик полезной для меня функции, после перевода компилятора в ASM_VERSION результат положительный для всех компиляторов включая "FPCx64".

пример
Add(MainForm,2953706,63,175)
{
Width=367
Height=210
Caption="PosEx(substr, s, start);"
Position=1
}
Add(Button,8247793,119,175)
{
Left=120
Top=90
Width=115
Caption="Выполнить"
link(onClick,14394038:PosEx_s,[])
}
Add(InlineCode,14394038,175,175)
{
@Hint=#116:PosEx(substr, s, start); - Находит позицию подстроки(substr=d) в строке(s), поиск начинается с позиции(start=count).|
WorkPoints=#7:PosEx_s|
EventPoints=#7:onEvent|
DataPoints=#5:Str_s|5:Str_d|9:Num_Count|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,Share,Debug,KOL;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|21: onEvent:THI_Event;|19: Str_s:THI_Event;|19: Str_d:THI_Event;|23: Num_count:THI_Event;|3: |49: procedure PosEx_s(var Data:TData; index:word);|3: |5: end;|0:|14:implementation|0:|7://PosEx|20:{$IFDEF ASM_VERSION}|89:Function PosEx(const substr : String; const s : String; const start: Integer ) : Integer;|20:Type StrRec = record|25: allocSiz: Longint;|23: refCnt: Longint;|23: length: Longint;|9: end;|29:Const skew = sizeof(StrRec);|3:asm|49:{ ->EAX Pointer to substr }|49:{ EDX Pointer to string }|49:{ ECX Pointer to start //cs }|49:{ <-EAX Position of substr in s or 0 }|0:|23: TEST EAX,EAX|24: JE @@noWork|23: TEST EDX,EDX|29: JE @@stringEmpty|38: TEST ECX,ECX //cs|38: JE @@stringEmpty //cs|0:|19: PUSH EBX|19: PUSH ESI|19: PUSH EDI|0:|65: MOV ESI,EAX { Point ESI to }|65: MOV EDI,EDX { Point EDI to }|0:|46: MOV EBX,ECX //cs save start|60: MOV ECX,[EDI-skew].StrRec.length { ECX = }|90: PUSH EDI { remember s position to calculate index }|0:|35: CMP EBX,ECX //cs|35: JG @@fail //cs|0:|72: MOV EDX,[ESI-skew].StrRec.length { EDX = bstr) }|0:|76: DEC EDX { EDX = Length(substr) - }|76: JS @@fail { < 0 ? return }|76: MOV AL,[ESI] { AL = first char of }|84: INC ESI { Point ESI to 2'nd char of substr }|76: SUB ECX,EDX { #positions in s to look }|89: { = Length(s) - Length(substr) + 1 }|22: JLE @@fail|30: DEC EBX //cs|30: SUB ECX,EBX //cs|30: JLE @@fail //cs|30: ADD EDI,EBX //cs|0:|7:@@loop:|21: REPNE SCASB|22: JNE @@fail|82: MOV EBX,ECX { save outer loop }|82: PUSH ESI { save outer loop substr pointer }|82: PUSH EDI { save outer loop s }|0:|23: MOV ECX,EDX|21: REPE CMPSB|85: POP EDI { restore outer loop s pointer }|85: POP ESI { restore outer loop substr pointer }|23: JE @@found|78: MOV ECX,EBX { restore outer loop nter }|22: JMP @@loop|0:|7:@@fail:|78: POP EDX { get rid of saved s nter }|23: XOR EAX,EAX|22: JMP @@exit|0:|14:@@stringEmpty:|23: XOR EAX,EAX|24: JMP @@noWork|0:|8:@@found:|89: POP EDX { restore pointer to first char of s }|89: MOV EAX,EDI { EDI points of char after match }|89: SUB EAX,EDX { the difference is the correct index }|7:@@exit:|19: POP EDI|19: POP ESI|19: POP EBX|9:@@noWork:|4:end;|20:{$ENDIF ASM_VERSION}|3://*|0:|58:procedure THiAsmClass.PosEx_s(var Data:TData; index:word);|3:var|11:d : string;|11:s : string;|16:start : Integer;|19:Result_s : Integer;|5:begin|37: d := ReadString(Data, Str_d, '');|37: s := ReadString(Data, Str_s, '');|45: start := ReadInteger(Data, Num_Count, 0);|35: Result_s := PosEx(d, s, start);|36: _hi_OnEvent(onEvent, Result_s); |4:end;|0:|4:end.|
link(onEvent,5558045:doText,[])
link(Str_s,12163355:Text,[])
link(Str_d,14571651:Text,[])
link(Num_Count,5208559:Text,[])
AddHint(65,-91,173,52,@Hint)
}
Add(Edit,12163355,175,35)
{
Left=120
Top=10
Width=180
Font=[MS Sans Serif,8,1,0,1]
Text="a100 /b200 ! /b200 /a100"
}
Add(Edit,14571651,182,77)
{
Left=120
Top=35
Width=115
Font=[MS Sans Serif,8,1,0,1]
Text="/a100"
}
Add(Edit,5208559,189,119)
{
Left=120
Top=60
Width=115
Font=[MS Sans Serif,8,1,0,1]
Text="12"
}
Add(Label,501503,119,35)
{
Left=5
Top=15
Width=59
Height=17
Font=[MS Sans Serif,8,1,8388608,1]
Caption="строкa(s)"
}
Add(Label,14611983,119,77)
{
Left=5
Top=40
Width=107
Height=17
Font=[MS Sans Serif,8,1,8388608,1]
Caption="подстрока(substr)"
}
Add(Label,308790,119,119)
{
Left=5
Top=65
Width=101
Height=17
Font=[MS Sans Serif,8,1,8388608,1]
Caption="с позиции(start)"
}
Add(Edit,5558045,224,175)
{
Left=120
Top=120
Width=115
}
карма: 3

0
Ответов: 4621
Рейтинг: 746
#195: 2014-01-14 19:52:58 ЛС | профиль | цитата
Так это KOL-овская директива. Я её не использовал, так как не хотел разбираться с возможными проблемами в ассемблерной части, что ещё усугубилось бы в версии x64. Там по-моему и Кладов периодически забывает внести исправления в ассемблерную часть KOL.

А по поводу MathParse - я посмотрю, вроде объявленные там функции должны быть стандартными для FPC, использую их.
карма: 26

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)