Polymorphism and dynamic objects

Object polymorphism should as I have understood
make it possible to use a objects child as the
parent object, for example in function calls such
as;

procedure DoSomething (WidthMe : SomeParentObject);
[...]
DoSomething (SomeChildObject);

For some reason it doesn't seem to work. I even tried virtual
methods.

Why?

And what is this (included source code)? Is this the solution
for VMTs and dynamic objects with polymorphism!

PS. Please answer in e-mail too. DS.

/J

[ Problem.pas < 1K ]
{ TObject }

constructor TObject.Init;
type
  Image = record
    Link: Word;
    Data: record end;
  end;
begin
{$IFNDEF Windows}
  FillChar(Image(Self).Data, SizeOf(Self) - SizeOf(TObject), 0);
{$ENDIF}
end;

{ Shorthand procedure for a done/dispose }

procedure TObject.Free;
begin
  Dispose(PObject(@Self), Done);
end;

destructor TObject.Done;
begin
end;