procedure OnCallbackWrapper( Fields: TSpecificFields);
begin
Assert(Fields.A = 5);
Assert(Fields.B = 4);
Assert(Fields.C = 3);
end;
or change declaration to
TGenericCallback<T> = procedure(const Fields: T);
A procedure passing parameters by value is not assignment compatible with a procedure which passes parameters by reference. Reference