-
Собстно появилась проблема:
Скачал 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)
-
Это можно прописать в файле fpc.cfg, который лежит в той же папке, что и бинарник компилятора.
-
А собственно, на счет MCK, делаю все правильно ?
-
Еще один нюанс. Чтобы компилилось под wince нужно сразу после установки пакета открыть его свойства и поставить птичку "Manual compilation" на закладке "IDE integration". Иначе лазарус будет пытаться скомпилить пакет МСК под arm-wince, что невозможно и не нужно.
-
Ну я пока делал просто пустую форму под kol + плюс комманда strip (-xS если не ошибаюсь) игнорируется....
-
Еще исправления.
изменить
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 байта, а вот реально сколько памяти выделяется не знаю?
-
-
> комманда strip (-xS если не ошибаюсь) игнорируется....
Комаднда на самом деле -Xs
-
PenWidth исправил. Проблема в packed record.
Баги лучше писать на страничку проекта на SourceForge. Специально сделал русский багтрекер там.
А тут будем обсуждать общие вопросы и проблемы...
-
Сделайте пожалуйста видео, как нужно ставить KOL/MCK и модули для WinCE. Спс
-
Смогу только в понедельник, конечно не видео :), но описать поподробнее. Была такая мысль, сам дня два промуздыкался, пока все заработало. Так что, если в понедельник будет актуально, то сделаю.
-
Конечно актуально :) Желательно тогда с картинками
-
Уже пятница :(
-
> [12] Chuck (17.08.07 21:30)
Ну так не было сказано в какой понедельник :)
-
Сделайте статью очень нужна.
Пытаюсь настроить Lazarus-0.9.23-fpc-2.1.5-20070816-win32.exe + kolce_rev116.
Ды\умаю всем будет интересно почитать.
-
> Уже пятница :(
Блин. Надобыло раньше напомнить, вышел после отпуска, замотался и забыл.:(( Сейчас займусь.
-
О сенкс если можно то поподробней можно с картинками :)
Если не сильно загружен, то постарайся за пару дней :)
-
-
Все делаю по статье под 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
-
Исправил путь не тот был, но ошибки опять лезут без мыла :(
$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
-
Или список ошибок неполный, или одно из двух. Hint - это не ошибка, это дае не предупреждение, и может отключаться. (Хотя я конечно не спец в лазарусе и фри паскале, но если бы хинт был фатальной ошибкой, то было бы не 2, а больше, наверное).
-
-vewnhi это перебор. Оставь просто -vewn, т.к. хинты в FPC очень придирчивые и не нужные в большинстве случаев. Нужные это warnings и notes (аналог хинтов в дельфи).
-
Все всем сенкс уже все поставил.
ЗЫ: Проблема была в сорсах нужны были 2.2 а у меня били 2.1.4 :(
-
mdw, спасибо !!!!
-
Ругается при сборке пустого KOL проекта -
Dictionary_0.inc(10,11) Error: Identifier not found "NewForm1"
-
хех :) Забыл "подвигать" форму
-
Прошу помощи в установке 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]
ЗЫ Еще ничего не пробовал делать, отпишусь как попробую.
-
В последних ревизиях лазаруса видно что-то поменяли. Будет время посмотрю и поправлю.
После твоих изменений не будут работать картинки для кнопок тулбара если их через МСК задавать...
-
Я работаю с
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
-
Править все равно придется.
С Lazarus-0.9.23-fpc-2.1.5-20070704-cross-arm-wince-win32.exe есть проблема, что он портит PATH после установки. Так что лучше качать официальный релиз 2.2.0 для arm-wince.
А за конвертер спасибо. Штука полезная.
-
> Так что лучше качать официальный релиз 2.2.0 для arm-wince.
Юрий, а где его взять, подскажите пожалуйста? Поискал, не нашел, 2.1.5 - сколько угодно, а 2.2.0 не могу найти. То ли лыжи не едут, то ли я е...:))
-
Юрий, еще вопрос возник. Я увидел, что в Kol.pas вы для wince везде убрали packed в объявления рекордов.
{$ifndef wince}packed{$endif} Record
В чем смысол этого и нужно ли у себя тоже самое делать?
-
-
mdw: packed record - это в большинстве случаев не очень хорошо :) А для процессора arm - это вообще неприемлемо, кроме крайне необходимых случаев (например, объявления структур данных для хранения в файлах или передачи по сети).
Для arm, например, чтобы прочитать dword из памяти, он должен быть расположен на границе 4х байт (4х байтовое выравнивание). Если это не так, то нужно выполнить 4 однобайтовых чтения и сформировать dword из этих 4х байт путем сдвигов. Таким образом, экономя пару байт на выравнивании данных (кстати, для размера программы это почти не актуально), мы теряем 12 байт (3 дополнительных 4х байтовых инструкций) на каждом обращении к элементу packed record типа dword (а вот это уже увеличивает код значительно). Потеря в скорости тоже значительная.
Для процессоров х86 выравнивание важно только в плане скорости, но это не настолько критично как для arm.
Вывод: не используйте packed record без крайней необходимости.
-
По поводу выравнивания в record все понятно. Я собственно имел в виду структуры в Windows, которые используются для передачи параметров в функции OS, они то обращаются как упакованной записи, или я ошибаюсь?
-
Почти все структуры Windows не упакованы (кроме заголовков файлов). Если где-то они объявлены как упакованые, то это ошибка и все работает лишь потому, что упаковка никак не меняет расположение полей...
-
Ок. Ясно. Просто всегда считал что это принципиально. Век живи...:))
-
Вопрос, наверное, в первую очередь Юрию Сидорову. Столкнулся с такой проблемой для 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 байта) поэтому раз в двадцать быстрее работает, если сравнивать как числа, а не строки.
-
Для процессора arm данные в памяти должны быть выровняны на границу 4х байт, чтобы прочитать/записать dword. В противном случае будет ошибка Bus error.
Если данные не выровняны, а прочитать хочется то нужно использовать ключевое слово unaligned:
if unaligned(PDW^) = DW then <какие то действия>
Использовать нужно только в крайнем случае, т.к. при этом генерится код побайтового чтения памяти, что гораздо медленнее и больше кода...
-
> Для процессора arm данные в памяти должны быть выровняны
> на границу 4х байт, чтобы прочитать/записать dword. В противном
> случае будет ошибка Bus error.
Падает просто молча, но там, кажется, в try..except заключено. Bus error возникал при передаче в процедуру в качестве параметра записи, добавил const, заработало.
Спасибо за разъяснение.
Юрий, так как все таки быстрее будет работать, мне главное скорость. Все же сравнивать строки?
-
Быстрее читать/писать по 4 байта выровненые данные в памяти. Если нужно обрабатывать некий поток данных и нужна скорость, то нужно проверять адрес текущих данных и принимать решение как их читать - либо напрямую (если выровнены), либо побайтово.
-
Ок, спасибо за информацию и советы.
-
> Для процессора arm данные в памяти должны быть выровняны
> на границу 4х байт, чтобы прочитать/записать dword.
А чтобы прочитать/записать word, на границу 2х байт? Или все равно к 4 байтам привязано?
-
word 2 байта.
-
> word 2 байта.
:)))
Я имел ввиду, при обращении к Word, находящегося по адресу, например $2, т.е. на границе слова, но не на границе DWord как реально читаться будет целиком сразу слово, или побайтно?
-
Я имел в виду что выравнивание для word достаточно до 2х байт чтобы нормально читать/писать. :)
-
Пытался поставить KOL на Lazarus-0.9.23-fpc-2.2.0-20071001-win32 и на Lazarus-0.9.23-fpc-2.2.1-20071001-win32 - та же ошибка, что [26]. Дмитрий, может выложите работающую версию (2.1.5) куда нибудь на сайт? А то 100 мБ коту под хвост. Погуглил - только две ссылки - на этот форум и на Вашу статью.
-
Используй последнюю svn версию KOL-CE. Там это исправлено.
-
> Дмитрий, может выложите работающую версию (2.1.5) куда нибудь
> на сайт?
Я сейчас пользуюсь fpc-2.2.0 все нормально работает. Правда ставлю уже поверх 2.1.5. Пытался ставить Lazarus-0.9.23-fpc-2.2.1-20071001-win32, но не устанавливается, чего-то не находит в дистрибутиве и откатывается назад.
Попробуйте 208 ревизию KOL с svn или отсюда www.kolnmck.ru/files/kolce/278/kolce_rev208.7z . В принцине можно выложить, только нужно прозондировать насчет места на сайте (100 мегов все же).
-
Взял 208 ревизию - www.kolnmck.ru/files/kolce/278/kolce_rev208.7z. При компиляции ошибка исчезла. При пересборке вылетает с ошибкой:
Compiling resource lazarus.rc
c:\lazarus\fpc\2.2.0\bin\i386-win32\windres.exe: no resources
C:\lazarus\ide\\lazarus.pp(115,1) Error:Error while linking
-
2 Yury Sidorov
Юрий, я для WinCE наваял замену IniFile (работает идентично Win32), оформил в inc-файл, аналогично "KOLCEOpenDir.inc". Прислать, добавите в архив KOL-CE? А то, как-то грустно без ini, реестр конечно здорово, но....
-
mdw: Присылай, конечно.
finder2007: проблема с путями. В путях должен быть c:\lazarus\fpc\2.2.0\bin\i386-win32
-
-
> finder2007: проблема с путями. В путях должен быть c:\lazarus\fpc\2.
> 2.0\bin\i386-win32
Не помогает. Lazarus-0.9.23-fpc-2.2.0-20071001-win32, 208 ревизия KOL, в fpc.cfg указал
-FuC:\lazarus\fpc\2.2.0\bin\i386-win32
-FuC:\lazarus\KOL\mck
-FuC:\lazarus\KOL\kol
-
В переменной окружения PATH должен быть путь C:\lazarus\fpc\2.2.0\bin\i386-win32
-
В переменной окружения PATH должен быть путь C:\lazarus\fpc\2.2.0\bin\i386-win32
Ура! Все получилось. Для таких же чайников, как и я, поясню - не надо искать переменную окружения в меню Lazarus "Окружение" или в fpc.cfg. Сразу заходите в панель управления -> Система -> ...
-
Еще вопрос - при использовании модуля jpegobj выскакивают многочисленные ошибки:
Error: Illegal COFF Magic while reading C:\lazarus\KOL\kol\JPegObj\jdapimin.obj
и так далее...
Как с ними бороться?
Другие модули вроде бы идут при включении {$mode delphi}
-
Борладновские .obj файлы нельзя линковать в FPC.
Можно использовать объектные файлы сделаные либо gcc либо MS VC++.
-
P.S. В поставке FPC есть пакет pasjpeg на чистом паскале. Попробуй его прикрутить.
-
Спасибо - попробую
-
В пакет CxKOLTiffJpeg входит jpeg, который не требует obj. Но там асм-вставки, полученные из masm. Правда, опять же, они оформлены как "чистые" asm-процедуры без параметров, и вполне может оказаться, что совместимы с FPC.
-
Я сделал порт уже. Если нужно выложу, правда под WinCE не пробовал еще.
-
> Я сделал порт уже. Если нужно выложу, правда под WinCE не
> пробовал еще.
Конечно надо :). У меня нахрапом не получилось (CxKOLTiffJpg) - пишет ошибку в jerror. Попробую еще freepascal-евский pasjpeg. Хотя в Delphi последний отказался компилироватся.
-
Завтра выложу. Портирвал не pasjpeg, там почему то с палитрой проблемы образовались. Но как посмотрел, и у pasjpeg и у CxKOLTiffJpg и у того что я портирвал, ноги из одного места растут... Исходники одни.:)
-
www.kolnmck.ru/files/components/graphics/koljpgimage.7z
Работает в D7, Lazarus (Win32 и WinCE). Пока так, хотя можно еще поковырять - несколько килобайт еще уйдет, думаю. Но это потом как нибудь.
-
> Работает в D7, Lazarus (Win32 и WinCE).
К Лазарусу (WIN32) пристыковалось без проблем. Пока еще только начинаю тестировать. На недокачанных JPEG вылетает на LoadFromFile c райнтайм - ошибками. При LoadFromStream просто вылетает. С докачанными кажется все нормально.
-
В Delphi такая же фигня :(
-
А что значит "недокачанный" и "докачанный" JPEG?
-
Например, оборванный при закачке куда-нибудь (сайт,ftp-сервер...). Или откуда-нибудь. Это просто моделируется в TC -> Разбить файл. Как правило, первый кусок (верхняя часть фото) нормально читается обычными программами. Вчера в Delphi отладку запустил - пытается читаться весь файл - пока до низа не дойдет. Height видимо из заголовка берется - какой должен быть.
-
А так не катит?
try <чтение файла> except <обработка ошибки> end;
-
> А так не катит?
> try <чтение файла> except <обработка ошибки> end;
Вчера ночью не получилось что-то. Вечером еще подергаюсь.
-
Err подключи.
-
Я сразу не въехал в чем причина. Изначально там при возникновении ошибок Exception'ы генерилились, соответственно и дальнейше чтение прекращалось, но мне это ну нужно было (файлы заведомо правильные), я и закоментировал все это дело. Нужно будет восстановить, посмотрю завтра.
-
> Err подключи.
При сборке появляется ошибка:
C:\lazarus\KOL\kol\err.pas(482,22) Error: Identifier not found "EnumResourceModules"
-
err.pas не портирован под FPC.
-
С испорченными (недокачанными) Jpeg ничего не получается :(
-
Не получается где? в Lazarus? там try-except работает и без Err. В Delphi подключите Err. Ну или пришлите файл, где падает, посмотрю.
-
1. скачайте свежий версий. :)
www.kolnmck.ru/files/components/graphics/koljpgimage.7z
2. Используем примерно так:
....
try
JPEGImage.LoadFromFile('C:\Error.jpg');
...
except
ShowMessage('Error');
end;
...
3. Обратите внимание на файл JConfig.INC. Его лучше положить в папку проекта, скопировав _JConfig.INC из архива. Там настраиваются варианты компиляции. По поводу обработки обратите внимание на:
//{$define USE_TRACE}
{$define USE_WARNING}
{$define USE_ERROR}
//{$define USE_ERR}
позволяют настроить различный уровень обработки ошибок.
-
Все заработало, спасибо! Чтобы показывались недокачанные Jpeg (а у меня их 99%) закомментировал все четыре define. Проверял в Lazarus.