[Lazarus] "Running" a library

Mark Morgan Lloyd markMLl.lazarus at telemetry.co.uk
Sat Sep 15 12:36:01 CEST 2012


Sven Barth wrote:

>> /Why/ can't a library be run standalone? We're already at the position
>> that an executable can decide whether it's been invoked from a shell or
>> the GUI and behave as appropriate, so why can't it decide whether it's
>> being run as a program or being initialised as a library?
> 
> A library and an application have different entry point signatures. Take 
> Windows for example. There the entry point for applications is 
> "procedure EntryPoint; stdcall;" while for DLLs it is "procedure 
> EntryPoint(aHinstance: PtrInt; aDLLReason: Word; aDLLParam: Pointer); 
> stdcall;". Additionally the entry point of a DLL is called multiple 
> times (once the process loads the library, every time a new thread is 
> created and destroyed and once the process unloads the library) while 
> the entry point of an application is only called once. Also AFAIK 
> Windows does not let you run binaries that are flagged as "DLL". That's 
> the reason why there is a program called "rundll32" ;) [though it 
> expects an exported function with a certain signature...]

Assuming for a moment that a binary can be built that is basically an 
executable but also exports library-style entry points, and which could 
be loaded into memory using DynLib or whatever: could the initialisation 
function be told to return fast and cleanly if it detected that it 
wasn't being run as a program? In that case, the caller could use DynLib 
to load it and then invoke a different entry point explicitly to handle 
initialisation.

Hypothetical case in which this sort of thing could be useful: if run as 
a program the library outputs a .inc or .h file describing its exports.

-- 
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]




More information about the Lazarus mailing list