devo fare un po 'record di calcolo delle dimensioni sub-dati in modo creato qualcosa di simileCome si ottiene l'indirizzo di un campo se si tratta di una procedura o di un puntatore a funzione?
function GetSubDataSize(const Rec: TRecord): integer;
begin
Result:=integer(@Rec.Field2) - integer(@Rec.Field1);
end;
Tutto è ok tranne per un caso, se uno di campo è una procedura o funzione puntatore, quindi in caso di
TRecord = record
Field2: procedure(Sender: TObject) of object;
end;
La funzione ottiene l'indirizzo della procedura stessa. C'è un modo per digitare il campo per ottenere l'indirizzo del campo e non l'indirizzo della funzione? So che posso risolverlo con i record delle varianti delle varianti, ma preferisco non usarlo.
Grazie,
Max
+1 - Dai documenti (Tipi procedurali): "Per ottenere l'indirizzo di memoria di una variabile procedurale (piuttosto che l'indirizzo memorizzato in esso), usa @ @ ". –
Grazie, Nat, sembra che questa sia una buona domanda per testare le abilità Delphi, ti sembra di passare facilmente;) – Maksee
@Maksee: Grazie! Non direi che le mie abilità sono migliori di altre (specialmente Mason!), Mi è capitato di dover risolvere un problema simile anch'io una volta. :) – Nat