There are two servers:
An EXE server runs as a separate application from the client, i.e. is a local server. JEXEServer provides the full J development system, which makes it easy to develop and debug applications. As a developer, you have full access to both the client and the J server environments.
A DLL is part of the client application and uses the same memory space, i.e. is an in-process server. A client accesses DLL services almost as efficiently as it accesses its own native services. The JDLLServer is not as convenient as JEXEServer for development purposes, but it is very efficient and is ideal for runtime applications.
Typically, you develop your application using JEXEServer, and run it using the JDLLServer.
Note that JEXEServer and JDLLServer are 32bit servers and are designed for 32bit clients. It may be possible to use JEXEServer from 16bit clients, but this is not officially supported.
J.DLL can be called directly as an ordinary DLL, without using OLE. For more information, see online help DLLs and Memory Management.
Clients
Any application with OLE Automation controller support, such as Visual Basic, Delphi, Excel, or a Visual C++ application, can use JEXEServer and JDLLServer. Also, any application that can call 32bit DLLs can access JDLLServer.
Registration
JEXEServer and JDLLServer must be registered with your system before they can be used. To do so, you run JREG.EXE , which is stored in the same directory as J.EXE, i.e. select Start/Run and enter:
c:\j401\jreg.exe (use the correct directory name)
If there are problems later when accessing the J servers it may be because they are no longer properly registered. You can always run JREG.EXE to register the servers again. In particular, you will need to do this if you move the J system files to another directory, or if for some reason, the Registry is damaged and you have to recover an old version.
Using the J OLE Automation servers
The steps are fairly straightforward, but may differ in minor ways from one client to another.
You should be familiar with both the J system and the client before tackling them in a client/server combination.
First load the client application and ensure it references the J servers. You need only select the server you intend to use, but when experimenting, you should check both:
Once the J servers are referenced, you can check the methods available, which are as follows.
Break | interrupt J execution |
Clear | erases all definitions in J |
Do | execute a J sentence |
ErrorText/ErrorTextM | get error text (run after a J error) |
Get/GetB/GetM | get the value of a J variable |
IsBusy | returns 0 if J is ready to execute, else an error code |
Log | display (1) or discard (0) the J EXE session log |
Quit | causes J EXE server to close when last object is released |
Set/SetB/SetM | set a value to a J variable |
Show | show (1) or hide (0) the J EXE server |
Transpose | return array data transposed |
For details, see file system\examples\data\jdll.h.
Note that methods Show and Log are ignored by a JDLLServer.
Once the J servers have been referenced, their methods become available for use by the client. You should declare the J server as an object in the client, and can then reference that object in order to access the J server methods.