То есть, имеем две разные структуры:
PRec1 = ^TRec1;
TRec1 = record
test: string;
end;
PRec2 = ^TRec2;
TRec2 = record
test2: integer;
end;
И легко можно сделать так:
procedure my(t: PRec1);
begin
ShowMessage(t.test);
end;
...
var
t2: TRec2;
begin
t2.test2 := 123;
my(@t2);
получить AV, конечно, но компилятор это кушает без проблем :(
Этому есть логичное объяснение?
Никогда не было таких проверок и не предвидится
Стикер
причем, если я попробую в my передать PRec2, то он ругнется на несовместимость. Получается, вся чернуха в команде "@", которая делает ТАКОЙ указатель, который совместим с ЛЮБЫМИ типизированными указателями и pointer? А как тогда "взять" типизированный указатель? Странно как то... очень легко ошибиться
операция @ теряет тип аргумента (то есть ее результат - голый нетипизированный Pointer, который можно присвоить любому типизированному указателю)
Чтобы не ошибаться, используй pointer и касты вручную.
Обсуждают сегодня