Проблема Freepascal с переходом с 2.0.2 на 2.0.4

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Ответить
3G
незнакомец
Сообщения: 6
Зарегистрирован: 01.09.2006 12:02:02

Проблема Freepascal с переходом с 2.0.2 на 2.0.4

Сообщение 3G »

Есть у меня любимый модуль для FPC - CURL.

Работает тьфу-тьфу-тьфу отлично, программки относительно простые с ним писать я умею, но вот незадача, программы не могут откомпилироваться на 2.0.4, хотя работают прекрасно на 2.0.2. И не могу понять почему, что изменилось в момент перехода между версии, там где модули курла собирались без проблем, теперь 13 ошибок. Ругаться стал на конструкцию

Error: Illegal type conversion: "ShortString" to "^Char"
"в коде например pChar(aStr)"

Может кто знает в чем может быть проблема?
SergKam
постоялец
Сообщения: 251
Зарегистрирован: 16.11.2005 20:31:11
Откуда: Украина,Харьков

Сообщение SergKam »

Вероятно надо включить в компиляторе использование AnsiString
3G
незнакомец
Сообщения: 6
Зарегистрирован: 01.09.2006 12:02:02

Сообщение 3G »

Тогда 2 вопроса рождается.

1) Подскажите, пожалуйста как! ибо не сталкивался с этим вопросом, уж больно хочется пересесть на 2.0.4, ибо там как раз улучшена работа с AnsiStrings.
2) Может кто знает почему тогда одинаковые параметры компиляции устанавливают разные параметры?
3G
незнакомец
Сообщения: 6
Зарегистрирован: 01.09.2006 12:02:02

Сообщение 3G »

C первым определился быстрее чем почитал ответ ppc386.exe (-Sh) а со вторым непонятность.
3G
незнакомец
Сообщения: 6
Зарегистрирован: 01.09.2006 12:02:02

Сообщение 3G »

(-Sh) не помогает :-(
3G
незнакомец
Сообщения: 6
Зарегистрирован: 01.09.2006 12:02:02

Сообщение 3G »

Где копать?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

А этот модуль с какими строками должен быть по задумке авторов? Возможно, строгости ради просто запретили преобразование ShortString в PChar?
Если ответ на первый вопрос - все-таки AnsiStrings, то нужно учесть, что {$mode objfpc}, если она есть, отключает Ansi строки, т.е. -Sh в командной строке может и не подействовать - нужно -S2h.
Наконец, у меня часто при обновлении бывает, что какой-то модуль берется не из нужного места. В этом случае помогает ключ -vu и внимательный анализ вывода.
3G
незнакомец
Сообщения: 6
Зарегистрирован: 01.09.2006 12:02:02

Сообщение 3G »

Сейчас попробую.
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
SergKam
постоялец
Сообщения: 251
Зарегистрирован: 16.11.2005 20:31:11
Откуда: Украина,Харьков

Сообщение SergKam »

судя по этой строче всетаки AnsiString предпологался

Код: Выделить всё

ocurluse.inc(513,11) Hint: Found declaration: UniqueString(var AnsiString) 


Может вместо {$mode objfpc}, поставить {$mode delphi}, и {$AnsiStrings}(я не помню как правильно ман смотри).
короче если в тексте стоит явно указание {$mode objfpc} то никаие ключи компилятора просто не действуют.
есть другой вариант- все обьявления в тексте String Заменить на AnsiString чтобы явно тип задавался, а где константами привести AnsiString("Текст")
Ответить