Siemargl писал(а):
У меня нет Дельфи СЕ и нет легальной возможности ее получить
Зачем же ты тогда предлагал что-то
перенести? Может оно и так работает? Пока ещё никто о проблемах не писал(кроме тебя, но сам ты даже и не пробовал).
Siemargl писал(а):
Я не нашел упоминаний от //DG, что там вообще были за проблемы.
Этот диалог был в ЛС:
0CodErr писал(а):
Кое-что у FPC работает не так, как в Delphi, например, для GetScreenSize пришлось немного извратиться, в то время как Delphi кладёт результат в eax, как и положено:
на FP
Код:
Function GetScreenSize: SIZE;
Asm
mov ecx, eax
push ebx
mov eax, 61
mov ebx, 1
int 64
pop ebx
mov dword[ecx], eax
End;
на Delphi
Код:
Function GetScreenSize(): SIZE;
Asm
push ebx
mov eax, 61
mov ebx, 1
int 64
pop ebx
End;
Так что, не всё можно просто так взять и перенести.
//DG писал(а):
Кстати, по поводу разницы между Д и ФП - не могу с тобой согласиться. Сделал тест, все так же - структура передана через регистр:
Код:
TMyRec = record
a: word;
b: word;
end;
// function MyProc(): TMyRec;
// begin
// Result.a := 1;
// Result.b := 2;
// end;
{$ASMMODE intel}
function MyProc(): TMyRec; assembler;
asm
mov eax,10102020h
end;
procedure TMyApplication.DoRun;
var
ErrorMsg: String;
a:tmyrec;
begin
a := MyProc();
0CodErr писал(а):
Код:
//////////////////////////////////////////
Type
SIZE = Record height, width : Word End;
//////////////////////////////////////////
Scr : SIZE;
//////////////////////////////////////////
Scr := GetScreenSize;
//////////////////////////////////////////
Function GetScreenSize: SIZE;
Asm
mov ecx, eax
push ebx
mov eax, 61
mov ebx, 1
int 64
pop ebx
mov dword[ecx], eax
End;
в результате так
Код:
sub esp,4
lea eax,[ebp-4]
call NEAR TEST_GETSCREENSIZE$$SIZE
mov eax,dword [ebp-4]
mov dword [U_TEST_SCR],eax
На всякий случай, это был
Free Pascal Compiler version 2.4.4 [2011/04/23] for i386
Copyright (c) 1993-2010 by Florian KlaempflТак что, если ещё и от версий зависит... слишком много будет
conditional define'ов.
//DG писал(а):
Я скорее думаю, это от опций компилирования зависит.
//DG писал(а):
Твой пример у меня в 3,0,0 также через регистр возвращает.
//DG писал(а):
А режим компиляции(точнее, синтаксиса)-то какой?
0CodErr писал(а):
//DG писал(а):
А режим компиляции(точнее, синтаксиса)-то какой?
Я специально его не указывал, но вот из документации:
Цитата:
This mode is selected by the $MODE FPC switch. On the command line, this means that you
none of the other compatibility mode switches. It is the default mode of the compiler (-Mfpc).
Значит был режим FPC.
//DG писал(а):
Цитата:
Значит был режим FPC.
Вот и я про то же, раз не указывал, то беретс fpc. А он и не должен быть совместимым с Дельфи, так что все путем. objfpc совместим, и он пересылает через регистр.
0CodErr писал(а):
Попробовал {$MODE OBJFPC} и {$MODE DELPHI}, — результат тот же, значит, тогда от версии зависит наверное.
//DG писал(а):
Цитата:
Попробовал {$MODE OBJFPC} и {$MODE DELPHI}, — результат тот же, значит, тогда от версии зависит наверное.
Наверно, я на последней тройке пробую.