[Lazarus] Library, Threads and Gui

Sven Barth pascaldragon at googlemail.com
Tue Jun 5 19:29:27 CEST 2012


On 05.06.2012 16:02, Kostas Michalopoulos wrote:
> On 5/6/2012 9:29 πμ, Mattias Gaertner wrote:
>> The "is" operator requires that the library uses the VMTs of the main
>> application.
> What does that imply exactly? I made a quick app to test the possibility
> of using DLLs for plugins. Both the app and the DLL uses a unit that
> contains the following class:
[...]
> Why exactly the "is" operator fails and how can it be fixed? And how
> will all the above work under Windows, Linux and Mac OS X?

If you use a unit in a library and a program the VMTs (Virtual Method 
Table) of the classes in that unit are available in both the program and 
the library as well. An object instance (and class type as well) is 
basically identified by its VMT pointer. Now if the library uses an "is" 
on a object instance passed from the program the VMT pointer the library 
expects and what the code behind "is" discovers will be different and 
thus the two objects will be different even if they come from the same 
source unit.

The only solution for this will be dynamically loadable packages as 
described here: http://wiki.freepascal.org/packages

No one is currently working on an implementation of this though and it 
also isn't a high priority item so it will take quite some time until 
this is implemented (if ever).

Regards,
Sven




More information about the Lazarus mailing list