mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-17 04:59:33 +02:00
30 lines
1.6 KiB
Plaintext
30 lines
1.6 KiB
Plaintext
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.
|