Конференция "Прочее" » Приведение типов в FPC
 
  • @!!ex © (09.04.08 19:40) [0]
    Сейчас переделываю код с дельфи под FPC
    столкнулся с тем, что там более жесткий конвертер типов.
    Тупо не позволяет приводить типы.
    Например, не работает PChar(S), приходится писать PChar(@S[1])
    Это еще ладно.
    Но что делать вот в таком случае??
    NewPointer:=Pointer(integer(DataForSend)+DataSize);
    Говорит:
    Error: Illegal type conversion: "Int64" to "^untyped"
    И как иначе то???
  • знаток (09.04.08 19:43) [1]
    А как ты собрался Int64 к указателю приводить?
  • @!!ex © (09.04.08 19:44) [2]
    > [1] знаток   (09.04.08 19:43)

    integer(DataForSend) и DataSize - integer
    integer - должен без проблем приводится к Pointer
  • palva © (09.04.08 19:49) [3]
    Наверно, у вас DataSize беззнаковое. Вот сумма и привeлась к Int64. Надо ее обратно к Integer возвращать.
  • @!!ex © (09.04.08 19:49) [4]
    Ладно, решил проблему жестким приведением сначала к integer, потом к Pointer.

    Теперь не хочет компилится ассемблерная функция:

    function FastArcCos(const X: Extended): Extended; Assembler;
    asm
     fld    X
     fld    X
     fmul
     fld1
     fsubr
     fsqrt
     fld    X
     fpatan
     fwait
    end;


    Fatal: Selected assembler reader not supported

  • @!!ex © (09.04.08 19:51) [5]
    > [3] palva ©   (09.04.08 19:49)

    Точно! Оно и было! Спасибо!
  • palva © (09.04.08 19:58) [6]
    @!!ex ©   (09.04.08 19:49) [4]
    Это надо смотреть параметры командной строки. Поменять там какие-нибудь параметры ассемблера. У меня ассемблер на Free Pasсal шел. Сейчас не помню подробностей.
  • знаток (09.04.08 20:02) [7]
    Ассемблер в настройках переключается. По умолчанию вроде там линуксовый синтаксис используется.
  • @!!ex © (09.04.08 20:14) [8]
    Да! Нашел!
  • @!!ex © (09.04.08 20:36) [9]
    Кстати, приведение типов тоже решается включение опцией.
    Правда он кучу варнингов пишет: типа приведение не портабельно.
    Но это не суть, сейчас хотя бы на винде запустить...
  • @!!ex © (09.04.08 20:49) [10]
    А вот это что такое??
    HUDUnit.pas(27,1) Fatal: Internal error 200310221

    type
     THUD = class
     public
       Resolution:integer;

       Messages:TMessanger;
       PlayerEnabled:integer;
       PlayerFadeOut:integer;

       texture_Indicator:integer;
       texture_Indicator_Grid:integer;
       Indicator_Value:PInteger;
       Indicator_Text:string;

       texture_Radar:integer;
       texture_Camera:integer;

       texture_Missile:integer;
       texture_Missile_Target:integer;
       texture_Bomb_Target:integer;
       texture_Gun:integer;
       texture_AttackAngle:integer;

       Radar:TRadar;
       BigRadar:boolean;
       p1:single;

       SmallRadar:TSmallRadar;
       font_Arial10:integer;
       font_ArialBlack18:integer;

       Constructor Create;
       Procedure   Draw(dt:integer);
     protected
     end;



    Выделяет строку texture_Camera:integer;
  • @!!ex © (09.04.08 20:59) [11]
    Это был баг компилятора.
    При повторной компиляции это само решилось.
    Теперь вопрос, что такое
    Fatal: Can't find unit StdConvs
    Что за StdConvs и где его взять??
  • TUser © (09.04.08 21:01) [12]
    Имхо, опции компилятора не выставлены, надо поставить -Mdelphi

    {$apptype console}

    var S: string;
       P: PChar;
    begin
     S := 'aaa';
     P := PChar (S);
     writeln (P);
    end.

    E:\temp>dcc32 pc
    Borland Delphi Version 15.0
    Copyright (c) 1983,2002 Borland Software Corporation
    pc.dpr(9)
    10 lines, 0.23 seconds, 10600 bytes code, 1805 bytes data.

    E:\temp>pc
    aaa

    E:\temp>fpc pc.dpr
    Free Pascal Compiler version 2.2.0 [2007/09/09] for i386
    Copyright (c) 1993-2007 by Florian Klaempfl
    Target OS: Win32 for i386
    Compiling pc.dpr
    pc.dpr(7,8) Error: Illegal type conversion: "ShortString" to "^Char"
    pc.dpr(9,4) Fatal: There were 1 errors compiling module, stopping
    Fatal: Compilation aborted
    Error: C:\Program Files\FPC220\bin\i386-win32\ppc386.exe returned an error
    exitcode (normal if you did not specify a source file to be compiled)

    E:\temp>fpc -Mdelphi pc.dpr
    Free Pascal Compiler version 2.2.0 [2007/09/09] for i386
    Copyright (c) 1993-2007 by Florian Klaempfl
    Target OS: Win32 for i386
    Compiling pc.dpr
    Linking pc.exe
    8 lines compiled, 0.1 sec, 23488 bytes code, 1224 bytes data

    E:\temp>pc
    aaa

    E:\temp>

  • tesseract © (09.04.08 21:11) [13]

    > Правда он кучу варнингов пишет: типа приведение не портабельно.
    > Но это не суть, сейчас хотя бы на винде запустить...


    Вроде была ссылка на  openet про приведение и работу с указателями. Правда на С.
  • @!!ex © (09.04.08 21:15) [14]
    > [13] tesseract ©   (09.04.08 21:11)

    Да это варнинги не критичные, когда портить буду - поправлю.
    Сейчас бы запустить хотя бы на винде. :))
  • tesseract © (09.04.08 21:18) [15]

    > приходится писать PChar(@S[1])


    А он конец строки кстати как отрабатывает ?
  • palva © (09.04.08 21:39) [16]

    > > приходится писать PChar(@S[1])
    >

    А @S[1] разве не работает? Вроде бы тот же тип.
 
Конференция "Прочее" » Приведение типов в FPC
Есть новые Нет новых   [134434   +26][b:0][p:0.002]