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.