-
Или список ошибок неполный, или одно из двух. 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, заработало. Спасибо за разъяснение.
Юрий, так как все таки быстрее будет работать, мне главное скорость. Все же сравнивать строки?
|