DLL and LIB Libraries
The interface for passing parameters forces Ensign Windows to have a
predefined structure for the DLL that can be called from ESPL.
However, that ESPL DLL can call other DLLs and you would design the interface
between them. When you write C++ or Delphi code and compile it, the
compiler resolves external addressing and it has the source to work with because
you identified the module in a USES clause. Since Ensign Windows is
already compiled, the best Ensign can do is to compile in a DLL stub, and that
stub is named ESPL.DLL. The stub had to be predefined in its
parameters, DLL filename, and function in the DLL that will be
called. Thus, all of these are predefined and prenamed.
Once in the DLL, you don't have an interface back to Ensign Window other than
the 9 parameters we predefined could be used to pass values. Your
DLL does not have access to any Ensign Windows functions or ESPL
functionality. ESPL on the other hand, though a bit slower than a
DLL, has a full interface with the rest of Ensign Windows and the database
records maintained by Ensign Windows.
Third party developers should be aware of and use the ability to create an
encrypted library for distribution so their code is private and
protected. This ability is in saving your file with a LIB extension
instead of a SPT extension. See Library in the Help documentation.
The encryption is secure enough. While it would be considered inadequate
for national security, it is sufficiently complex that their work will not
be reverse engineered should they release something as a commercial
product.
Customers will have to add an Include statement in their existing Main
program script to include a commercial package, and add a set of IF Who=
xxx THEN yyyy statements to gain access to a commercial
library of code. You might distribute a sample Main program script,
but this script could not be compiled and should be an example for people to ADD
your stuff to their existing script. Then when ESPL runs, it
compiles the entire script into one memory based instruction set.
Any conflicts on use of the WHO variable would have to be resolved in the user's
combined Main script.
|