-
Сейчас переделываю код с дельфи под FPC столкнулся с тем, что там более жесткий конвертер типов. Тупо не позволяет приводить типы. Например, не работает PChar(S), приходится писать PChar(@S[1]) Это еще ладно. Но что делать вот в таком случае?? NewPointer:=Pointer(integer(DataForSend)+DataSize); Говорит: Error: Illegal type conversion: "Int64" to "^untyped" И как иначе то???
-
А как ты собрался Int64 к указателю приводить?
-
> [1] знаток (09.04.08 19:43)
integer(DataForSend) и DataSize - integer integer - должен без проблем приводится к Pointer
-
Наверно, у вас DataSize беззнаковое. Вот сумма и привeлась к Int64. Надо ее обратно к Integer возвращать.
-
Ладно, решил проблему жестким приведением сначала к 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
-
> [3] palva © (09.04.08 19:49)
Точно! Оно и было! Спасибо!
-
@!!ex © (09.04.08 19:49) [4] Это надо смотреть параметры командной строки. Поменять там какие-нибудь параметры ассемблера. У меня ассемблер на Free Pasсal шел. Сейчас не помню подробностей.
-
Ассемблер в настройках переключается. По умолчанию вроде там линуксовый синтаксис используется.
-
Да! Нашел!
-
Кстати, приведение типов тоже решается включение опцией. Правда он кучу варнингов пишет: типа приведение не портабельно. Но это не суть, сейчас хотя бы на винде запустить...
-
А вот это что такое?? HUDUnit.pas(27,1) Fatal: Internal error 200310221type
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;
-
Это был баг компилятора. При повторной компиляции это само решилось. Теперь вопрос, что такое Fatal: Can't find unit StdConvs Что за StdConvs и где его взять??
-
Имхо, опции компилятора не выставлены, надо поставить -Mdelphi
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>
-
> Правда он кучу варнингов пишет: типа приведение не портабельно. > Но это не суть, сейчас хотя бы на винде запустить...
Вроде была ссылка на openet про приведение и работу с указателями. Правда на С.
-
> [13] tesseract © (09.04.08 21:11)
Да это варнинги не критичные, когда портить буду - поправлю. Сейчас бы запустить хотя бы на винде. :))
-
> приходится писать PChar(@S[1])
А он конец строки кстати как отрабатывает ?
-
> > приходится писать PChar(@S[1]) >
А @S[1] разве не работает? Вроде бы тот же тип.
|