Форум: "KOL";
Текущий архив: 2008.08.10;
Скачать: [xml.tar.bz2];
ВнизLazarus+MCK - Ошибка Найти похожие ветки
← →
SiNiK © (2007-07-25 22:02) [0]Собстно появилась проблема:
Скачал Lazarus-0.9.23-fpc-2.1.5-20070724-win32.exe + kolce_rev116
Установил MCK (Открыл MirrorKOLPackage.lpk далее Компилировать -> Установить) Все хорошо. Создаю Project > Application Сохраняю. Потом кидаю на форму KOLProject1 прописываю projectDesk = KOLPrj Потом кидаю KOLForm1 Ещё раз сохраняю, и открываю проект - KOLPrj.lpr
Начинаю компилировать (Ctrl+F9) Требует файл KOL.pas Кладу его в папку вместе с mck*.pas Компилится и выдает - что то про LazarusResources (извиняюсь, точно в данный момент сказать не могу) Потом комментирую эту строку, но программа компилируется но не запускается :(
Собственно вопросы, что я делаю не так, и есть ли в Lazarus окно, где можно указать пути для поиска модулей (Аналог в Delphi - Library)
← →
Yury Sidorov (2007-07-25 23:19) [1]Это можно прописать в файле fpc.cfg, который лежит в той же папке, что и бинарник компилятора.
← →
SiNiK © (2007-07-26 09:02) [2]А собственно, на счет MCK, делаю все правильно ?
← →
Yury Sidorov (2007-07-26 12:59) [3]Еще один нюанс. Чтобы компилилось под wince нужно сразу после установки пакета открыть его свойства и поставить птичку "Manual compilation" на закладке "IDE integration". Иначе лазарус будет пытаться скомпилить пакет МСК под arm-wince, что невозможно и не нужно.
← →
SiNiK © (2007-07-26 14:58) [4]Ну я пока делал просто пустую форму под kol + плюс комманда strip (-xS если не ошибаюсь) игнорируется....
← →
mdw © (2007-07-26 16:28) [5]Еще исправления.
изменить
go_PenWidth = 10;
на
go_PenWidth = 8;
и
TGDIPen = packed record
BrushBitmap: HBitmap;
Width: Integer;
BrushStyle: TBrushStyle;
Style: TPenStyle;
//Width: Integer; раньше было здесь
Mode: TPenMode;
Geometric: Boolean;
EndCap: TPenEndCap;
Join: TPenJoin;
end;
Иначе при присвоении под WinCE PenWidth валится c нарушением доступа к памяти. Причину не понял, есть подозрение что неправильно считаеся длина перечисляемых типов (TBrushStyle, TPenStyle), я проверял SizeOf дает 4 байта, а вот реально сколько памяти выделяется не знаю?
← →
mdw © (2007-07-26 16:31) [6]Кстати, Юрий, куда удобнее ошибки\исправления выкладывать сюда или на http://sourceforge.net/projects/kol-ce/ ? Я сюда пока, чтобы народ тоже в курсе был и мог поправить у себя.
← →
Yury Sidorov (2007-07-26 16:51) [7]
> комманда strip (-xS если не ошибаюсь) игнорируется....
Комаднда на самом деле -Xs
← →
Yury Sidorov (2007-07-26 16:53) [8]PenWidth исправил. Проблема в packed record.
Баги лучше писать на страничку проекта на SourceForge. Специально сделал русский багтрекер там.
А тут будем обсуждать общие вопросы и проблемы...
← →
Chuck (2007-08-09 18:01) [9]Сделайте пожалуйста видео, как нужно ставить KOL/MCK и модули для WinCE. Спс
← →
mdw © (2007-08-09 19:07) [10]Смогу только в понедельник, конечно не видео :), но описать поподробнее. Была такая мысль, сам дня два промуздыкался, пока все заработало. Так что, если в понедельник будет актуально, то сделаю.
← →
Chuck (2007-08-09 19:17) [11]Конечно актуально :) Желательно тогда с картинками
← →
Chuck (2007-08-17 21:30) [12]Уже пятница :(
← →
ANTPro © (2007-08-17 21:55) [13]> [12] Chuck (17.08.07 21:30)
Ну так не было сказано в какой понедельник :)
← →
Melkij (2007-08-19 19:05) [14]Сделайте статью очень нужна.
Пытаюсь настроить Lazarus-0.9.23-fpc-2.1.5-20070816-win32.exe + kolce_rev116.
Ды\умаю всем будет интересно почитать.
← →
mdw © (2007-08-20 11:00) [15]
> Уже пятница :(
Блин. Надобыло раньше напомнить, вышел после отпуска, замотался и забыл.:(( Сейчас займусь.
← →
Melkij (2007-08-20 12:32) [16]О сенкс если можно то поподробней можно с картинками :)
Если не сильно загружен, то постарайся за пару дней :)
← →
mdw © (2007-08-20 15:45) [17]Обновление на http://www.kolnmck.ru
В разделе Файлы - Основные библиотеки и дополнения: KOL и MCK
KOLnMCK-CE в одном архиве для Лазарус. Создание программ под как под Win32, так и под WinCE (PocketPC). Rev 171.
http://www.kolnmck.ru/files/kolce/272/kolce_rev171.7z
В разделе Документы
Небольшая статья по использованию Lazarus, KOL&MCK и WinCE
http://www.kolnmck.ru/lessons/lazarus_use.shtml
← →
Melkij (2007-08-20 20:22) [18]Все делаю по статье под win32 все нормально.
Дохожу до пункта "Компиляция под WinCE" устанавливаю:
- Вкладка "Пути": устанавливаем "Tип элeмeнтa yпpaвлeния LCL (дpyгoe)" равным "wince".
- Вкладка "Код", "Цeлeвaя Плaтфopмa" : устанавливаем "Для кaкoй OC (-T)" равным "WinCE", "Для ЦП: (-P)" равным "arm"
Нажимаю "ОК" викадает Error:
http://melkij.kiev.ua/error.png
Питаюсь собрать опять Error:
Error: ppcarm.exe can"t be executed, error message: Failed to execute "ppcarm.exe" -S2cgi -OG1 -TWinCE -Xs -vewnhi -l -Fu. -oproject1.exe -dKOL_MCK project1.lpr
Посмотрел нет такого файла ppcarm.exe.
Переписал ppcrossarm.exe в ppcarm.exe, опять пытаюсь собрать и тут тоже Error:
$ppcarm.exe -S2cgi -OG1 -TWinCE -Xs -vewnhi -l -FuC:\lazarus\fpc\kol\kol -dKOL_MCK proj/menu.pas
Hint: Start of reading config file fpc.cfg
Hint: End of reading config file fpc.cfg
Hint: Start of reading config file kolfpc.cfg
Hint: End of reading config file kolfpc.cfg
Warning: You are using the obsolete switch -OG
Free Pascal Compiler version 2.1.4 [2007/08/17] for arm
Copyright (c) 1993-2007 by Florian Klaempfl
Target OS: WinCE for ARM
Compiling proj\menu.pas
menu.pas(6,5) Fatal: Can"t find unit KOL
Fatal: Compilation aborted
← →
Melkij (2007-08-20 20:32) [19]Исправил путь не тот был, но ошибки опять лезут без мыла :(
$ppcarm.exe -S2cgi -OG1 -TWinCE -Xs -vewnhi -l -FuC:\lazarus\kol\kol -dKOL_MCK proj/menu.pas
Free Pascal Compiler version 2.1.4 [2007/08/17] for arm
Copyright © 1993-2007 by Florian Klaempfl
Target OS: WinCE for ARM
Compiling proj\menu.pas
KOL.pas(52989,28) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(52999,28) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(53011,28) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(53015,47) Hint: Type "TNMLISTVIEW" redefinition
KOL.pas(53025,17) Hint: Type "PNMLISTVIEW" redefinition
KOL.pas(53036,12) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(53088,12) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(53107,77) Hint: Local variable "Txt" does not seem to be initialized
KOL.pas(53153,14) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(53156,21) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(53227,27) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(53227,45) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(53239,12) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(53267,13) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(53268,13) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(53337,47) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(53350,12) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(53414,41) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(53595,11) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(53628,11) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(53785,5) Hint: Local variable "Pt" does not seem to be initialized
KOL.pas(53882,7) Hint: Local variable "P" does not seem to be initialized
KOL.pas(53920,3) Hint: Local variable "P" does not seem to be initialized
KOL.pas(54805,10) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(56365,35) Hint: Conversion between ordinals and pointers is not portable
KOL.pas(56450) Fatal: There were 2 errors compiling module, stopping
Fatal: Compilation aborted
← →
Vladimir Kladov (2007-08-20 21:52) [20]Или список ошибок неполный, или одно из двух. Hint - это не ошибка, это дае не предупреждение, и может отключаться. (Хотя я конечно не спец в лазарусе и фри паскале, но если бы хинт был фатальной ошибкой, то было бы не 2, а больше, наверное).
← →
Yury Sidorov (2007-08-20 23:16) [21]-vewnhi это перебор. Оставь просто -vewn, т.к. хинты в FPC очень придирчивые и не нужные в большинстве случаев. Нужные это warnings и notes (аналог хинтов в дельфи).
← →
Melkij (2007-08-21 00:03) [22]Все всем сенкс уже все поставил.
ЗЫ: Проблема была в сорсах нужны были 2.2 а у меня били 2.1.4 :(
← →
Chuck (2007-08-21 23:34) [23]mdw, спасибо !!!!
← →
Chuck (2007-08-22 09:37) [24]Ругается при сборке пустого KOL проекта -
Dictionary_0.inc(10,11) Error: Identifier not found "NewForm1"
← →
Chuck (2007-08-22 09:38) [25]хех :) Забыл "подвигать" форму
← →
swa1 © (2007-09-12 18:57) [26]Прошу помощи в установке KOL и MCK.
Пытался устанавливать вначале в Lazarus-0.9.22-fpc-2.0.4-20070326-win32
Шла ошибка и модуля KOL.pas - не мог найти RichEdit
[b] C:\lazarus\kol\kol\KOL.pas(512,15) Fatal: Can"t find unit RichEdit [/b]
Поискал, почитал...Установил Lazarus-0.9.23-fpc-2.2.1-20070910-win32.
Пытаюсь опять. При компиляции выдал:
[b] C:\lazarus\kol\mck\mckObjs.pas(412,9) Error: identifier idents no member "Set_BPP24_B8G8R8_A1_BIO_TTB" [/b]
:(
Попытался разобраться (уровень то у меня чайника :) , так временами пытаюсь решать прикладные задачки ).
Все это находится в процедуре SetBitmapFormat, которой в оригинальных MCK (не для Lazarus) я не нашел, там вместо нее выплняется код:
[i] Bmp.Width := W;
Bmp.Height := bitmap.Height;
{$IFNDEF _D2}
Bmp.PixelFormat := Format;
{$ENDIF}
[/i]
Начал играться, в mckObjs.pas закрыл процедуру вообще, а в mckCtrls.pas сделал так же как в оригинальном, т.е. заменил
[b] SetBitmapFormat(Bmp, W, bitmap.Height, Format);
[/b]
на
[b] Bmp.Width := W;
Bmp.Height := bitmap.Height;
{$IFNDEF _D2}
Bmp.PixelFormat := Format;
{$ENDIF}
[/b]
Получил :
"Compiling package MirrorKOLPackage 2.78" completed :)
Правда что то там предупредило, но на сколько хватило моих знаний и того что я почитал, вроде все в норме:
[b] MIRROR.pas(1942,15) Warning: An inherited method is hidden by "TKOLCustomControl.SetCursor(const AnsiString)" [/b]
Вот сразу решил отписаться и заодно спросить... [b] А прав ли я ? [/b]
ЗЫ Еще ничего не пробовал делать, отпишусь как попробую.
← →
Yury Sidorov (2007-09-13 14:02) [27]В последних ревизиях лазаруса видно что-то поменяли. Будет время посмотрю и поправлю.
После твоих изменений не будут работать картинки для кнопок тулбара если их через МСК задавать...
← →
mdw © (2007-09-13 15:02) [28]Я работаю с
Lazarus-0.9.23-fpc-2.1.5-20070719-win32.exe и Lazarus-0.9.23-fpc-2.1.5-20070704-cross-arm-wince-win32.exe
Проблем нет. Может выложить на сайте?
Кстати, кому интересно. Сделал конвертор из делфи7 в лазарус (KOL). Вроде нормально работает. Лежит здесь http://www.kolnmck.ru/files4.shtml
← →
Yury Sidorov (2007-09-13 20:44) [29]Править все равно придется.
С Lazarus-0.9.23-fpc-2.1.5-20070704-cross-arm-wince-win32.exe есть проблема, что он портит PATH после установки. Так что лучше качать официальный релиз 2.2.0 для arm-wince.
А за конвертер спасибо. Штука полезная.
← →
mdw © (2007-09-14 10:53) [30]
> Так что лучше качать официальный релиз 2.2.0 для arm-wince.
Юрий, а где его взять, подскажите пожалуйста? Поискал, не нашел, 2.1.5 - сколько угодно, а 2.2.0 не могу найти. То ли лыжи не едут, то ли я е...:))
← →
mdw © (2007-09-14 11:44) [31]Юрий, еще вопрос возник. Я увидел, что в Kol.pas вы для wince везде убрали packed в объявления рекордов.
{$ifndef wince}packed{$endif} Record
В чем смысол этого и нужно ли у себя тоже самое делать?
← →
Лёля (2007-09-14 12:56) [32]> [28] mdw © (13.09.07 15:02)
http://sourceforge.net/project/showfiles.php?group_id=2174#
там в конце страницы сборки под Windows
я собирала из исходников и компилятор, и лазарус, и вам того же желаю
← →
Yury Sidorov (2007-09-14 13:16) [33]mdw: packed record - это в большинстве случаев не очень хорошо :) А для процессора arm - это вообще неприемлемо, кроме крайне необходимых случаев (например, объявления структур данных для хранения в файлах или передачи по сети).
Для arm, например, чтобы прочитать dword из памяти, он должен быть расположен на границе 4х байт (4х байтовое выравнивание). Если это не так, то нужно выполнить 4 однобайтовых чтения и сформировать dword из этих 4х байт путем сдвигов. Таким образом, экономя пару байт на выравнивании данных (кстати, для размера программы это почти не актуально), мы теряем 12 байт (3 дополнительных 4х байтовых инструкций) на каждом обращении к элементу packed record типа dword (а вот это уже увеличивает код значительно). Потеря в скорости тоже значительная.
Для процессоров х86 выравнивание важно только в плане скорости, но это не настолько критично как для arm.
Вывод: не используйте packed record без крайней необходимости.
← →
mdw © (2007-09-14 14:20) [34]По поводу выравнивания в record все понятно. Я собственно имел в виду структуры в Windows, которые используются для передачи параметров в функции OS, они то обращаются как упакованной записи, или я ошибаюсь?
← →
Yury Sidorov (2007-09-14 14:24) [35]Почти все структуры Windows не упакованы (кроме заголовков файлов). Если где-то они объявлены как упакованые, то это ошибка и все работает лишь потому, что упаковка никак не меняет расположение полей...
← →
mdw © (2007-09-14 14:25) [36]Ок. Ясно. Просто всегда считал что это принципиально. Век живи...:))
← →
mdw © (2007-09-28 22:45) [37]Вопрос, наверное, в первую очередь Юрию Сидорову. Столкнулся с такой проблемой для WinCE, под win32 все работает.
Есть область памяти (сразу скажу, что достаточно большая и за пределы не выхожу, проверял). Привожу указатель к типу PDWORD (тоже самое с PWORD) и программа вылетает на этом месте. Вот примерный код.
const DW: DWORD = Некоторое значение;
var P: PAnsiChar;
PDW: PDWORD;
begin
...
//P - распределяется GetMem, туда читаются данные из файла все нормально они есть.
...
PDW:= Pointer(P);
if PDW^ = DW then <какие то действия>
И вот здесь программа валится. пробовал и просто:
ShowMessage(Int2Str(PDW^));
эффект такой же. Такое ощущение, что падает при разъименовании указателя.
Собственно вопрос, в чем проблемма? специфика компилятора? Если да, то может подскажете как обойти ловчее? Под Win32 это работает конечно, а вот для WinCE - нет.
Объясню зачем это. Нужно искать\заменять потстроку в строке (разбор XML). Теги короткие (4 байта) поэтому раз в двадцать быстрее работает, если сравнивать как числа, а не строки.
← →
Yury Sidorov (2007-09-29 11:43) [38]Для процессора arm данные в памяти должны быть выровняны на границу 4х байт, чтобы прочитать/записать dword. В противном случае будет ошибка Bus error.
Если данные не выровняны, а прочитать хочется то нужно использовать ключевое слово unaligned:
if unaligned(PDW^) = DW then <какие то действия>
Использовать нужно только в крайнем случае, т.к. при этом генерится код побайтового чтения памяти, что гораздо медленнее и больше кода...
← →
mdw © (2007-09-29 11:56) [39]
> Для процессора arm данные в памяти должны быть выровняны
> на границу 4х байт, чтобы прочитать/записать dword. В противном
> случае будет ошибка Bus error.
Падает просто молча, но там, кажется, в try..except заключено. Bus error возникал при передаче в процедуру в качестве параметра записи, добавил const, заработало.
Спасибо за разъяснение.
Юрий, так как все таки быстрее будет работать, мне главное скорость. Все же сравнивать строки?
← →
Yury Sidorov (2007-09-29 21:25) [40]Быстрее читать/писать по 4 байта выровненые данные в памяти. Если нужно обрабатывать некий поток данных и нужна скорость, то нужно проверять адрес текущих данных и принимать решение как их читать - либо напрямую (если выровнены), либо побайтово.
Страницы: 1 2 вся ветка
Форум: "KOL";
Текущий архив: 2008.08.10;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.008 c