Помогите пожалуйста с портированием компонента

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Помогите пожалуйста с портированием компонента

Сообщение qivi » 14.03.2009 18:17:29

Очень, очень сильно хочу портировать один нестандартный компонент с делфи на лазарус...

Компилятор ругается на одну из строк следующим образом:

Код: Выделить всё
(102,69) Fatal: Can't find unit Controls used by ACRConverts


Как действовать?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Помогите пожалуйста с портированием компонента

Сообщение Vadim » 14.03.2009 19:21:31

qivi
Избавиться очень просто - из строки Uses модуля ACRConverts удалить слово Controls.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Помогите пожалуйста с портированием компонента

Сообщение скалогрыз » 14.03.2009 20:24:21

Очень, очень сильно хочу портировать один нестандартный компонент с делфи на лазарус...


модуль Controls является частью LCL. и если компонент визуальный, то убрать его из uses-ов всё-равно не получится :)

если ты портируешь компонент, как пакет лазаруса (Lazarus package)
то тебе необходимо добавить в "зависимость" своего пакета, пакет LCL. (по-умолчанию пакеты зависят только от FCL)

если, ты портируешь по-другом, то поясни как :)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Помогите пожалуйста с портированием компонента

Сообщение Vadim » 14.03.2009 21:04:03

скалогрыз
Тогда как Lazarus может ругаться на свой же стандартный модуль? :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Помогите пожалуйста с портированием компонента

Сообщение скалогрыз » 14.03.2009 21:31:29

Тогда как Lazarus может ругаться на свой же стандартный модуль?

пакет лазаруса, может НЕ зависеть от стандартных модулей Лазаруса.

система пакетов нужна для облегчения (усложнения?) работы с большим количеством сторонних модулей. Подцепив пакет в виде зависимости, ты уже указываешь лазарусу, что при сборке, все модули ещи в этом пакете.

так например, у любого проект,а созданного в лазарусе, есть привязка к LCL. И тебе не нужно прописывать в путях проекта ${LazDir}\LCL, чтобы среда и компилятор нашли, где-же эти стандартные модули. Лазарь указывает эти пути за тебя!

Попробуй создай пустой проект с формой и кнопчкой. Затем зайди в "Инспектор проекта" и убери зависимость от LCL. и попробуй скомпилировать...
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Помогите пожалуйста с портированием компонента

Сообщение qivi » 15.03.2009 03:50:04

Результат просто коласален... или фатален...

C:\lazarus\components\accuracer\ACRCriticalSection.pas(25,25) Hint: Type "TRTLCriticalSection" redefinition
C:\lazarus\components\accuracer\ACRMemory.pas(245,36) Hint: Local variable "BlockHeader" does not seem to be initialized
C:\lazarus\components\accuracer\ACRMemory.pas(251,26) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRMemory.pas(265,23) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRMemory.pas(265,15) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRMemory.pas(330,22) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRMemory.pas(408,28) Hint: Local variable "Status" does not seem to be initialized
C:\lazarus\components\accuracer\ACRVer.inc(2,2) Warning: Misplaced global compiler switch
C:\lazarus\components\accuracer\ACRVer.inc(2,2) Warning: Misplaced global compiler switch
C:\lazarus\components\accuracer\ACRZlib.pas(311,18) Hint: Parameter "AppData" not used
C:\lazarus\components\accuracer\ACRZlib.pas(316,18) Hint: Parameter "AppData" not used
C:\lazarus\components\accuracer\ACRZlib.pas(343,16) Hint: Local variable "strm" does not seem to be initialized
C:\lazarus\components\accuracer\ACRZlib.pas(363,32) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRZlib.pas(363,51) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRZlib.pas(363,76) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRZlib.pas(363,26) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRZlib.pas(363,32) Warning: Converting pointers to signed integers may result in wrong comparison results and range errors, use an unsigned type instead.
C:\lazarus\components\accuracer\ACRZlib.pas(363,51) Warning: Converting pointers to signed integers may result in wrong comparison results and range errors, use an unsigned type instead.
C:\lazarus\components\accuracer\ACRZlib.pas(363,76) Warning: Converting pointers to signed integers may result in wrong comparison results and range errors, use an unsigned type instead.
C:\lazarus\components\accuracer\ACRZlib.pas(386,19) Hint: Local variable "zstream" does not seem to be initialized
C:\lazarus\components\accuracer\ACRZlib.pas(393,16) Hint: Variable "OutBuf" does not seem to be initialized
C:\lazarus\components\accuracer\ACRZlib.pas(419,35) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRZlib.pas(419,29) Warning: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRZlib.pas(419,35) Warning: Converting pointers to signed integers may result in wrong comparison results and range errors, use an unsigned type instead.
C:\lazarus\components\accuracer\ACRZlib.pas(235,3) Note: Local variable "Levels" not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(229,16) Hint: Function result variable does not seem to be initialized
C:\lazarus\components\accuracer\ACRBzip2D.pas(264,16) Hint: Function result variable does not seem to be initialized
C:\lazarus\components\accuracer\ACRBzip2D.pas(262,24) Hint: Parameter "AppData" not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(267,24) Hint: Parameter "AppData" not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(304,16) Hint: Local variable "strm" does not seem to be initialized
C:\lazarus\components\accuracer\ACRBzip2D.pas(308,16) Hint: Variable "OutBuf" does not seem to be initialized
C:\lazarus\components\accuracer\ACRBzip2D.pas(321,32) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRBzip2D.pas(321,51) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRBzip2D.pas(321,76) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRBzip2D.pas(321,26) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRBzip2D.pas(321,32) Warning: Converting pointers to signed integers may result in wrong comparison results and range errors, use an unsigned type instead.
C:\lazarus\components\accuracer\ACRBzip2D.pas(321,51) Warning: Converting pointers to signed integers may result in wrong comparison results and range errors, use an unsigned type instead.
C:\lazarus\components\accuracer\ACRBzip2D.pas(321,76) Warning: Converting pointers to signed integers may result in wrong comparison results and range errors, use an unsigned type instead.
C:\lazarus\components\accuracer\ACRBzip2D.pas(343,16) Hint: Local variable "strm" does not seem to be initialized
C:\lazarus\components\accuracer\ACRBzip2D.pas(351,16) Hint: Variable "OutBuf" does not seem to be initialized
C:\lazarus\components\accuracer\ACRBzip2D.pas(368,32) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRBzip2D.pas(368,51) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRBzip2D.pas(368,76) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRBzip2D.pas(368,26) Hint: Conversion between ordinals and pointers is not portable
C:\lazarus\components\accuracer\ACRBzip2D.pas(368,32) Warning: Converting pointers to signed integers may result in wrong comparison results and range errors, use an unsigned type instead.
C:\lazarus\components\accuracer\ACRBzip2D.pas(368,51) Warning: Converting pointers to signed integers may result in wrong comparison results and range errors, use an unsigned type instead.
C:\lazarus\components\accuracer\ACRBzip2D.pas(368,76) Warning: Converting pointers to signed integers may result in wrong comparison results and range errors, use an unsigned type instead.
C:\lazarus\components\accuracer\ACRBzip2D.pas(81,3) Hint: Local const "BZ_RUN" is not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(82,3) Hint: Local const "BZ_FLUSH" is not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(84,3) Hint: Local const "BZ_OK" is not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(85,3) Hint: Local const "BZ_RUN_OK" is not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(86,3) Hint: Local const "BZ_FLUSH_OK" is not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(87,3) Hint: Local const "BZ_FINISH_OK" is not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(89,3) Hint: Local const "BZ_SEQUENCE_ERROR" is not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(90,3) Hint: Local const "BZ_PARAM_ERROR" is not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(91,3) Hint: Local const "BZ_MEM_ERROR" is not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(92,3) Hint: Local const "BZ_DATA_ERROR" is not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(93,3) Hint: Local const "BZ_DATA_ERROR_MAGIC" is not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(94,3) Hint: Local const "BZ_IO_ERROR" is not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(95,3) Hint: Local const "BZ_UNEXPECTED_EOF" is not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(96,3) Hint: Local const "BZ_OUTBUFF_FULL" is not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(98,3) Hint: Local const "BZ_BLOCK_SIZE_100K" is not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(100,3) Note: Local variable "_rNums" not used
C:\lazarus\components\accuracer\ACRBzip2D.pas(155,3) Note: Local variable "_crc32Table" not used
C:\lazarus\components\accuracer\ACRCompression.pas(768,37) Hint: Converting the operands to "Int64" before doing the add could prevent overflow errors.
C:\lazarus\components\accuracer\ACRCompression.pas(1239,40) Hint: Local variable "CHeader" does not seem to be initialized
C:\lazarus\components\accuracer\ACRCompression.pas(1300,18) Warning: Mixing signed expressions and longwords gives a 64bit result
C:\lazarus\components\accuracer\ACRCompression.pas(1628,39) Hint: Local variable "OutBuf" does not seem to be initialized
C:\lazarus\components\accuracer\ACRCompression.pas(1634,35) Hint: Converting the operands to "Int64" before doing the subtract could prevent overflow errors.
C:\lazarus\components\accuracer\ACRCompression.pas(1682,46) Hint: Local variable "OutBuf" does not seem to be initialized
C:\lazarus\components\accuracer\ACRCompression.pas(1689,54) Hint: Converting the operands to "Int64" before doing the add could prevent overflow errors.
C:\lazarus\components\accuracer\ACRCompression.pas(1782,41) Hint: Local variable "TempBuf" does not seem to be initialized
C:\lazarus\components\accuracer\ACRCompression.pas(1847,47) Hint: Converting the operands to "Int64" before doing the add could prevent overflow errors.
C:\lazarus\components\accuracer\ACRCompression.pas(1849,55) Hint: Converting the operands to "Int64" before doing the add could prevent overflow errors.
C:\lazarus\components\accuracer\ACRCompression.pas(2151,12) Hint: Local variable "TempPath" does not seem to be initialized
C:\lazarus\components\accuracer\ACRCompression.pas(2264,27) Hint: Local variable "Len" does not seem to be initialized
C:\lazarus\components\accuracer\ACRCompression.pas(2272,23) Hint: Local variable "b" does not seem to be initialized
C:\lazarus\components\accuracer\Ver.inc(1,2) Warning: The switch "$E" is not supported by the currently selected target
C:\lazarus\components\accuracer\Ver.inc(1,2) Note: Ignored compiler switch "$F"
C:\lazarus\components\accuracer\Ver.inc(1,2) Note: Ignored compiler switch "$G"
C:\lazarus\components\accuracer\Ver.inc(1,2) Warning: Unsupported switch "$K"
C:\lazarus\components\accuracer\Ver.inc(1,2) Warning: Unsupported switch "$N"
C:\lazarus\components\accuracer\Ver.inc(1,2) Warning: Unsupported switch "$Y"
C:\lazarus\components\accuracer\ACRDecUtil.pas(59,20) Hint: Type "PByte" redefinition
C:\lazarus\components\accuracer\ACRDecUtil.pas(60,20) Hint: Type "PInteger" redefinition
C:\lazarus\components\accuracer\ACRDecUtil.pas(61,20) Hint: Type "PWord" redefinition
C:\lazarus\components\accuracer\Ver.inc(1,2) Warning: The switch "$E" is not supported by the currently selected target
C:\lazarus\components\accuracer\Ver.inc(1,2) Note: Ignored compiler switch "$F"
C:\lazarus\components\accuracer\Ver.inc(1,2) Note: Ignored compiler switch "$G"
C:\lazarus\components\accuracer\Ver.inc(1,2) Warning: Unsupported switch "$K"
C:\lazarus\components\accuracer\Ver.inc(1,2) Warning: Unsupported switch "$N"
C:\lazarus\components\accuracer\Ver.inc(1,2) Warning: Unsupported switch "$Y"
C:\lazarus\components\accuracer\ACRDecUtil.pas(285,57) Error: Illegal qualifier
C:\lazarus\components\accuracer\ACRDecUtil.pas(297,59) Error: Illegal qualifier
C:\lazarus\components\accuracer\ACRDecUtil.pas(1451,15) Warning: Calling an overload function in assembler
C:\lazarus\components\accuracer\ACRDecUtil.pas(1464,15) Warning: Calling an overload function in assembler
C:\lazarus\components\accuracer\ACRDecUtil.pas(1678,28) Error: Identifier not found "FindClassHInstance"
C:\lazarus\components\accuracer\ACRDecUtil.pas(1688,22) Error: Identifier not found "AddModuleUnloadProc"
C:\lazarus\components\accuracer\ACRDecUtil.pas(1738,25) Error: Identifier not found "RemoveModuleUnloadProc"
C:\lazarus\components\accuracer\ACRDecUtil.pas(1745) Fatal: There were 5 errors compiling module, stopping


С этим ещё можно что то сделать?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Помогите пожалуйста с портированием компонента

Сообщение Vadim » 15.03.2009 04:31:09

qivi писал(а):С этим ещё можно что то сделать?

Учить матчасть! На сообщения типа "Hint" и "Warning" внимания не обращайте.
Кстати, Вы обещали английский подтянуть, чтобы понимать сообщения компилятора. Что помешало?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Помогите пожалуйста с портированием компонента

Сообщение скалогрыз » 15.03.2009 12:43:23

Vadim писал(а):
qivi писал(а):С этим ещё можно что то сделать?

Учить матчасть! На сообщения типа "Hint" и "Warning" внимания не обращайте.
Кстати, Вы обещали английский подтянуть, чтобы понимать сообщения компилятора. Что помешало?


Кстати, с компилятором идёт руссификация сообщений! =) ленивые (на язык) могут и её подцепить...
естественно, тру-кодеры и гуру, плеваться будут, но по-моему для начинающих (и ленивых) имеет право на жизнь!

qivi писал(а):Результат просто коласален... или фатален...

Результат колосален! на Hint и Note можешь забить.. пока :)
вообще, когда (если) прикрутят Compiler Messages то будет круто :)

C:\lazarus\components\accuracer\ACRVer.inc(2,2) Warning: Misplaced global compiler switch
C:\lazarus\components\accuracer\Ver.inc(1,2) Warning: The switch "???" is not supported by the currently selected target
C:\lazarus\components\accuracer\Ver.inc(1,2) Warning: Unsupported switch "???"
C:\lazarus\components\accuracer\Ver.inc(1,2) Note: Ignored compiler switch "???"

это тонкости комплияторов Делфи и FPC не критично... хотя...

C:\lazarus\components\accuracer\ACRZlib.pas(363,32) Warning: Converting pointers to signed integers may result in wrong comparison results and range errors, use an unsigned type instead.

тоже тонкости Делфи и FPC. Те ошибки, которые делфи делает негласно, FPC предварительно ругается... но тоже можешь забить.

C:\lazarus\components\accuracer\ACRDecUtil.pas(285,57) Error: Illegal qualifier

...мдя...

C:\lazarus\components\accuracer\ACRDecUtil.pas(1451,15) Warning: Calling an overload function in assembler

ассемблер конечно рулит, но ... если создаём кросс-платформенный код... то лучше о нём забыть :)

C:\lazarus\components\accuracer\ACRDecUtil.pas(1678,28) Error: Identifier not found "FindClassHInstance"
C:\lazarus\components\accuracer\ACRDecUtil.pas(1688,22) Error: Identifier not found "AddModuleUnloadProc"
C:\lazarus\components\accuracer\ACRDecUtil.pas(1738,25) Error: Identifier not found "RemoveModuleUnloadProc"

Хм... компонент вешается на какие-то низко-уровневые VCL. (эти функции описанны у delphi в модуле System). Смею догадываться, что ради совместимости между разными версиями LCL (другой причины я не вижу).
я бы рад написать: "смело коментируй эти строчки" но не буду :)

ЗЫ: по фотографиям лечить трудно. Просто по имени файла и номеру строчки трудно поправить ошибку.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Помогите пожалуйста с портированием компонента

Сообщение qivi » 15.03.2009 14:33:15

ЗЫ: по фотографиям лечить трудно. Просто по имени файла и номеру строчки трудно поправить ошибку.

http://uralprogr.narod.ru/component.7z
Вот собственно мои эксперементы... может тогда посмотрите их. В архиве исходный вариант под борландовские платформы и моя неудачная попытка под лазаруса.

Кстати, Вы обещали английский подтянуть, чтобы понимать сообщения компилятора. Что помешало?

Откровенно гогворя я не припомню такого обещания... приимущественно пологаюсь на переводчик, но это невсегда (даже при успешном переводе) даёт понимание ситуации.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Помогите пожалуйста с портированием компонента

Сообщение скалогрыз » 15.03.2009 19:07:39

как заставить FPC+Lazarus ругаться русским матом!

С недавних пор (0.9.26?) LCL переведён на понимание UTF-8. Это значит, что Лазарус ожидает, что FPC будет писать все строчки в формате UTF-8, что для винды неверно (в 866 весь консольный ввывод под виндой?).

FPC поддерживает возможность "перевода" сообщений с английского на другие языки. Традиционно в России перевод таких вещей не занимаются (помницо даже в школах при обучении TP заставляли привыкать к английскому интерфейсу).

Что делать. Берём UTF-8 файлик FPC сообщений на русском языке (приложен к этому посту). Сохраняем его на диск (например в корень диска C:, так что его полное имя будет C:\errorrwu.msg)
Дальше - лезем в fpc.cfg файл. (обычно он лежит зарытый в папке $Lazarus\fpc\...)
добавляем в конец этого файла,
-Frc:\errorrwu.msg
где c:\errorrwu.msg - это путь к файлу с русскими сообщениями... он может быть другим c:\Lazarus\fpc\bin\i386-win32\errorrwu.msg... не важно!
сохраняем изменения в файле. Если путь указан правильно, то при следующей компиляции многие сообщения от комплиятора будут на русском языке.

Этот же файлик поможет любой nix системе, если у неё базовая кодировка - UTF8.

К сожалению, переводить сообщения похоже бросили :) (ай-ай-ай) так что новые сообщения (добавленные с новыми версиями fpc будут на английском языке).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Помогите пожалуйста с портированием компонента

Сообщение qivi » 15.03.2009 23:23:19

Спасибо за русификацию сообщений.
Скалогрыз, а архивчик с компонентом не смотрели? Может могли бы помочь чемто не по "фотографиям"... я бы был безгранично благодарен.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Помогите пожалуйста с портированием компонента

Сообщение скалогрыз » 15.03.2009 23:30:17

qivi писал(а):Спасибо за русификацию сообщений.
Скалогрыз, а архивчик с компонентом не смотрели? Может могли бы помочь чемто не по "фотографиям"... я бы был безгранично благодарен.

эээ вы-кать совсем не нужно, ибо все в одной лодке плывём!
честно говоря не смотрел, да и не хочу.
меня можно компонентом заинтересовать, но только если будет предложено финансовое вознаграждение за работу.
в любом другом случае, могу советовать только добрым словом :)
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Помогите пожалуйста с портированием компонента

Сообщение Vadim » 16.03.2009 04:54:41

скалогрыз писал(а):Кстати, с компилятором идёт руссификация сообщений! =) ленивые (на язык) могут и её подцепить...

Я там видел в комплекте два файлика перевода сообщений на русский, но они мне, откровенно говоря, не понравились. :) Хотя это, наверное, сила привычки. :) На английском текст более компактный, глаза меньше устают и кажеться, что понятнее. :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 28

Рейтинг@Mail.ru