Проблема Freepascal с переходом с 2.0.2 на 2.0.4
Модератор: Модераторы
Проблема Freepascal с переходом с 2.0.2 на 2.0.4
Есть у меня любимый модуль для FPC - CURL.
Работает тьфу-тьфу-тьфу отлично, программки относительно простые с ним писать я умею, но вот незадача, программы не могут откомпилироваться на 2.0.4, хотя работают прекрасно на 2.0.2. И не могу понять почему, что изменилось в момент перехода между версии, там где модули курла собирались без проблем, теперь 13 ошибок. Ругаться стал на конструкцию
Error: Illegal type conversion: "ShortString" to "^Char"
"в коде например pChar(aStr)"
Может кто знает в чем может быть проблема?
Работает тьфу-тьфу-тьфу отлично, программки относительно простые с ним писать я умею, но вот незадача, программы не могут откомпилироваться на 2.0.4, хотя работают прекрасно на 2.0.2. И не могу понять почему, что изменилось в момент перехода между версии, там где модули курла собирались без проблем, теперь 13 ошибок. Ругаться стал на конструкцию
Error: Illegal type conversion: "ShortString" to "^Char"
"в коде например pChar(aStr)"
Может кто знает в чем может быть проблема?
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
А этот модуль с какими строками должен быть по задумке авторов? Возможно, строгости ради просто запретили преобразование ShortString в PChar?
Если ответ на первый вопрос - все-таки AnsiStrings, то нужно учесть, что {$mode objfpc}, если она есть, отключает Ansi строки, т.е. -Sh в командной строке может и не подействовать - нужно -S2h.
Наконец, у меня часто при обновлении бывает, что какой-то модуль берется не из нужного места. В этом случае помогает ключ -vu и внимательный анализ вывода.
Если ответ на первый вопрос - все-таки AnsiStrings, то нужно учесть, что {$mode objfpc}, если она есть, отключает Ansi строки, т.е. -Sh в командной строке может и не подействовать - нужно -S2h.
Наконец, у меня часто при обновлении бывает, что какой-то модуль берется не из нужного места. В этом случае помогает ключ -vu и внимательный анализ вывода.
Сейчас попробую.
CURL pascal (curlpas) можно найти при небольшом желании в сети
Не помогает к сожалению
Вот как он ругается. Еще раз отмечу, что на 2.0.2 - тишина, компиляция ошибок не выдает, только хинты.
ocurlacc.inc(75,5) Hint: Local variable "FH" does not seem to be initialized
ocurlacc.inc(100,23) Hint: Type size mismatch, possible loss of data / range che
ck error
ocurlcll.inc(27,37) Error: Illegal type conversion: "ShortString" to "^Char"
ocurlcll.inc(31,17) Error: Illegal type conversion: "ShortString" to "^Char"
ocurlcll.inc(132,22) Error: Illegal type conversion: "ShortString" to "^Char"
ocurlcll.inc(361,5) Hint: Local variable "f" does not seem to be initialized
ocurlcll.inc(495,5) Hint: Local variable "f" does not seem to be initialized
ocurlcb2.inc(164,26) Error: Illegal type conversion: "ShortString" to "^Char"
ocurlset.inc(11,64) Error: Illegal type conversion: "ShortString" to "^Char"
ocurlset.inc(19,21) Error: Illegal type conversion: "ShortString" to "^Char"
ocurlget.inc(8,24) Error: Call by var parameters have to match exactly: Got "Sho
rtString" expected "WideString"
ocurlprv.inc(18,11) Hint: Found declaration: UniqueString(var WideString)
ocurluse.inc(513,11) Hint: Found declaration: UniqueString(var AnsiString)
curlobj.pas(161,20) Error: Illegal type conversion: "ShortString" to "^Char"
curlobj.pas(163,22) Error: Call by var parameters have to match exactly: Got "Sh
ortString" expected "WideString"
ocurlprv.inc(18,11) Hint: Found declaration: UniqueString(var WideString)
ocurluse.inc(513,11) Hint: Found declaration: UniqueString(var AnsiString)
curlobj.pas(171,22) Error: Illegal type conversion: "ShortString" to "^Char"
curlobj.pas(173,22) Error: Call by var parameters have to match exactly: Got "Sh
ortString" expected "WideString"
ocurlprv.inc(18,11) Hint: Found declaration: UniqueString(var WideString)
ocurluse.inc(513,11) Hint: Found declaration: UniqueString(var AnsiString)
curlobj.pas(186,5) Hint: Local variable "buf" does not seem to be initialized
curlobj.pas(191,41) Error: Call by var parameters have to match exactly: Got "Sh
ortString" expected "WideString"
ocurlprv.inc(18,11) Hint: Found declaration: UniqueString(var WideString)
ocurluse.inc(513,11) Hint: Found declaration: UniqueString(var AnsiString)
curlobj.pas(195,43) Error: Call by var parameters have to match exactly: Got "Sh
ortString" expected "WideString"
ocurlprv.inc(18,11) Hint: Found declaration: UniqueString(var WideString)
ocurluse.inc(513,11) Hint: Found declaration: UniqueString(var AnsiString)
curlobj.pas(222) Fatal: There were 13 errors compiling module, stopping
curlobj.pas(1,40) Fatal: Compilation aborted
CURL pascal (curlpas) можно найти при небольшом желании в сети
Не помогает к сожалению
Вот как он ругается. Еще раз отмечу, что на 2.0.2 - тишина, компиляция ошибок не выдает, только хинты.
ocurlacc.inc(75,5) Hint: Local variable "FH" does not seem to be initialized
ocurlacc.inc(100,23) Hint: Type size mismatch, possible loss of data / range che
ck error
ocurlcll.inc(27,37) Error: Illegal type conversion: "ShortString" to "^Char"
ocurlcll.inc(31,17) Error: Illegal type conversion: "ShortString" to "^Char"
ocurlcll.inc(132,22) Error: Illegal type conversion: "ShortString" to "^Char"
ocurlcll.inc(361,5) Hint: Local variable "f" does not seem to be initialized
ocurlcll.inc(495,5) Hint: Local variable "f" does not seem to be initialized
ocurlcb2.inc(164,26) Error: Illegal type conversion: "ShortString" to "^Char"
ocurlset.inc(11,64) Error: Illegal type conversion: "ShortString" to "^Char"
ocurlset.inc(19,21) Error: Illegal type conversion: "ShortString" to "^Char"
ocurlget.inc(8,24) Error: Call by var parameters have to match exactly: Got "Sho
rtString" expected "WideString"
ocurlprv.inc(18,11) Hint: Found declaration: UniqueString(var WideString)
ocurluse.inc(513,11) Hint: Found declaration: UniqueString(var AnsiString)
curlobj.pas(161,20) Error: Illegal type conversion: "ShortString" to "^Char"
curlobj.pas(163,22) Error: Call by var parameters have to match exactly: Got "Sh
ortString" expected "WideString"
ocurlprv.inc(18,11) Hint: Found declaration: UniqueString(var WideString)
ocurluse.inc(513,11) Hint: Found declaration: UniqueString(var AnsiString)
curlobj.pas(171,22) Error: Illegal type conversion: "ShortString" to "^Char"
curlobj.pas(173,22) Error: Call by var parameters have to match exactly: Got "Sh
ortString" expected "WideString"
ocurlprv.inc(18,11) Hint: Found declaration: UniqueString(var WideString)
ocurluse.inc(513,11) Hint: Found declaration: UniqueString(var AnsiString)
curlobj.pas(186,5) Hint: Local variable "buf" does not seem to be initialized
curlobj.pas(191,41) Error: Call by var parameters have to match exactly: Got "Sh
ortString" expected "WideString"
ocurlprv.inc(18,11) Hint: Found declaration: UniqueString(var WideString)
ocurluse.inc(513,11) Hint: Found declaration: UniqueString(var AnsiString)
curlobj.pas(195,43) Error: Call by var parameters have to match exactly: Got "Sh
ortString" expected "WideString"
ocurlprv.inc(18,11) Hint: Found declaration: UniqueString(var WideString)
ocurluse.inc(513,11) Hint: Found declaration: UniqueString(var AnsiString)
curlobj.pas(222) Fatal: There were 13 errors compiling module, stopping
curlobj.pas(1,40) Fatal: Compilation aborted
судя по этой строче всетаки AnsiString предпологался
Может вместо {$mode objfpc}, поставить {$mode delphi}, и {$AnsiStrings}(я не помню как правильно ман смотри).
короче если в тексте стоит явно указание {$mode objfpc} то никаие ключи компилятора просто не действуют.
есть другой вариант- все обьявления в тексте String Заменить на AnsiString чтобы явно тип задавался, а где константами привести AnsiString("Текст")
Код: Выделить всё
ocurluse.inc(513,11) Hint: Found declaration: UniqueString(var AnsiString) Может вместо {$mode objfpc}, поставить {$mode delphi}, и {$AnsiStrings}(я не помню как правильно ман смотри).
короче если в тексте стоит явно указание {$mode objfpc} то никаие ключи компилятора просто не действуют.
есть другой вариант- все обьявления в тексте String Заменить на AnsiString чтобы явно тип задавался, а где константами привести AnsiString("Текст")
