To provide a LispWorks application with a DDE server, the following three steps should be followed: define a specialized server class using
define-dde-server
, provide the server class with the functionality it requires by specializing methods on it and/or using
define-dde-server-function
, and finally, start an instance of the server using
start-dde-server
define-dde-server
class-name
service-name
The macro
define-dde-server
defines a class for a Lisp DDE server. The class inherits from
dde-server
.
define-dde-server-function name-and-options transaction (binding *)
form *
The macro
define-dde-server-function
is used to define a server function, called
name
, which is called when a specific transaction occurs.
The defined function may either be attached to a server object (possibly only for a particular topic class) or to a dispatching topic object.
start-dde-server
name
The function
start-dde-server
creates an instance of a server of the class specified by
name
which then starts accepting transactions. If successful the function returns the server, otherwise
nil
is returned.
You need to call
start-dde-server
in a thread that will process Windows messages. This can either be done by using
capi:execute-with-interface
to run it in the thread of an application's main window (if there is one) or by running it in a dedicated thread as in the example in the
LispWorks Reference Manual
. DDE callbacks will happen in this thread.
The next command line shows how to use
define-dde-server
to define a server class called
foo-server
that has the service name "
FOO
".
(win32:define-dde-server foo-server "FOO")
It is usual to provide the new server class with some functionality. The next command illustrates how to define a server function called
test
, which takes a string as an argument, and prints this to the standard output. For convenience, the system topic is used, though usually it is better to define your own topic.
(win32:define-dde-server-function (bar :topic :system)
:execute
((x string))
(format t "~&~s~%" x)
t)
Finally, a
foo-server
can be started using
start-dde-server
(win32:start-dde-server `foo-server)
This function returns the server object, which responds to requests for conversations with the service name "
FOO
", and accepts execute transactions for the function
test
in the "System" topic.