This document describes the API changes introduced in version 0.99.12 of PTCPas

Since version 0.99.12, most PTCPas classes have been made descendants of
TInterfacedObject and are now only accessible via interfaces. The reason for
this change is to provide automatic memory management via reference counting for
the PTC core objects, so that they are freed automatically, once they're no
longer in use, without causing any memory leaks.

Unfortunately, this breaks existing code. However, it's relatively easy to fix
it and the purpose of this document is to explain how. Here's a basic summary
of the changes that need to be made:

1) in your source code, replace "TPTCSomething.Create" with
"TPTCSomethingFactory.CreateNew" (where 'Something' will correspond to one of
those, depending on which objects are used in your program: Area, Color,
Console, Event, Format, KeyEvent, Mode, MouseButtonEvent, MouseEvent, Palette,
Surface and Timer)
2) replace "TPTCSomething" with "IPTCSomething" (where 'Something' = an object
from point #1)
3) try compiling your code and you'll probably get some errors. Remove every
call to .Free that fails with a compilation error, since it's no longer needed -
PTC core objects are freed automatically when their reference count reaches
zero.
4) if you are using FreeAndNil, be extra careful! Since it accepts an untyped
var parameter (bad design coming from Delphi), it will not cause a compilation
error, if you are using it on an interface, but you will instead get a crash at
runtime. Sadly, there's not much you can do, besides checking every call to
FreeAndNil and replacing it with ":= nil" when you're using it on a PTC core
object.
