[fpc-devel] FPC dynamic libraries

Daniël Mantione daniel.mantione at freepascal.org
Thu Feb 8 14:23:11 CET 2007



Op Thu, 8 Feb 2007, schreef Michael Van Canneyt:

> > Design a plugin binary API, dynload the plugin. It is not necessary tha=
t =

> > the RTL is shared for this purpose (allthough it could reduce the size).
> > =

> > This way you only have to keep the plugin API backwards compatible, =

> > and could allow binary plugins to be used with any Lazarus version. =

> > Keeping a plugin API compatible is very doable, unlike of the full RTL,=
 FCL =

> > and LCL, which seems next to impossible to me.
> =

> Why ?

There is OOP code in those libraries. The slightest code modification will =

change the layout of the VMT.

> Borland does it.

Borland does not. Each Delphi version has its own BPL packages, for =

example you have vcl50.bpl. The only reason it is workable with Delphi is =

that they don't release very often.

> Secondly, there are serious problems with this approach which make it unu=
sable
> for an IDE like Lazarus.
> =

> Assume I get a component instance from the plugin (MyObject), then extrem=
ely =

> simple and basic statements like
> =

> If (MyObject is TComponent) then
>   XYZ
> =

> will fail, even though MyObject is a TComponent, because the VMT of the =

> MyObject TComponent parent resides in the library, and the VMT of TCompon=
ent
> used in the If statement is inside Lazarus, causing the statement to fail=
, =

> even though it should be true. When using packages, the statement will fu=
nction
> correctly.

I was talking a binary API, and that automatically disallows sending =

classes through the API, because you want to prevent that an internal =

change breaks your external API. Simply design the API in a proper way.

> The only option are packages, and packages need an RTL in a dynlib.
> That this requires a strict versioning schedule, is part of the deal. =


Indeed, and because this is not a workable solution, just count the =

number of changes in the VCL, a proper designed binary API is what you =

need.

> Borland's packages are also incompatible between released versions.

Sure, but above you said Borland keeps them compatible.

Dani=EBl


More information about the fpc-devel mailing list