Building a dynamic library with C routines

Before you build a DLL or shared object that contains your C routines, you must first initialize the runtime C interface using the optional second argument to the %DLL_OPEN routine. Follow the instructions below:

1. (Windows only) Add the following export command to the EXPORTS section of the .def file that you use to build your DLL:
2. Link the file xclapi.obj (or xclapi.o on UNIX) into your shared object. If you are using the floating point routines (get_xarg_fval and put_xarg_fval), you must also link in xclapif.obj (or xclapif.o on UNIX).
3. Add a new DLL handle to your common global area. For example:
dllhand, D_ADDR
4. Modify your programs to open your DLL by calling %DLL_OPEN, making sure to specify the optional C interface flag as the second argument. (See %DLL_OPEN.) For example:
dllhand = %DLL_OPEN(mydll, 1)
5. Either modify your programs to use %DLL_CALL instead of XCALL, or use a .DEFINE macro. (See %DLL_CALL for details about %DLL_CALL and Parameterized macros for more information about .DEFINE macros.)

For example, if your code contained

xcall ttqis(row, col, "text")

and ttqis was a routine you linked into the Synergy runtime, you could add the following to your standard include files:

.define ttqis(a,b,c) dll_call(dllhand, DLL_TYPE_DBLCALL, "ttqis", a,b,c)

If you have a variable number of arguments, always specify the highest number of arguments in the .DEFINE statement. The maximum number of arguments is 20.