If you try to use the standard function TypeOf on an object type that doesn’t have a virtual method table, you’ll get this error notice.
Declare a dummy virtual procedure to force the compiler to build a VMT as an easy workaround.
program Produce;
type
  TMyObject = object
    procedure MyProc;
  end;
procedure TMyObject.MyProc;
begin
  (*...*)
end;
var
  P: Pointer;
begin
  P := TypeOf(TMyObject);    (*<-- Error message here*)
end.
The example attempts to use the TypeOf standard function on a type TMyObject that lacks virtual functions and thus no virtual function table (VMT).
program Solve;
type
  TMyObject = object
    procedure MyProc;
    procedure Dummy; virtual;
  end;
procedure TMyObject.MyProc;
begin
  (*...*)
end;
procedure TMyObject.Dummy;
begin
end;
var
  P: Pointer;
begin
  P := TypeOf(TMyObject);
end.
Introduce a dummy virtual function or remove the call to TypeOf as a workaround.
Leave a Reply