There were several discussions, that when doing a DLL or .so with Lazarus and using same with a Lazarus project, it's an issue that the DLL will create it's own LCL "application" instance and thus you can't easily do "normal" GUI stuff in the DLL/.so. I seem to remember that there is a possible workaround by passing the main program's application's pointer to the called instance (or something like that). With Delphi you can use a "runtime package" that seems to do this automatically rather than a DLL.
Now I'm interested in the contrary:
Is there a decent way to create multiple instances of the LCL "application" and/or GUI interface to allow for an application that has multiple independent "main forms" (each with it's own main thread), i.e. something like multiple applications that share a common memory space (and heap management). The goal is to create a complex application that in one window needs to show rather complex GUI informations that come in from some threads and are passed towards the main thread and thus permanently generate heavy LCL activity and on another window some user interaction should be handled in a timely way (rather than being blocked by activity done in the other Window). Starting from some level of complexity, simply doing "Application.ProcessMessages" is not enough any more as (1) this introduces additional overhead slowing down things even more and (2) with modern multi-core PCs, this does not allow the concurrent frames to use multiple CPUs which would greatly optimize the LCL operations.
-Michael
