4.44 Windows DDE interface
AllApplicationManualNameSummaryHelp

  • Documentation
    • Reference manual
      • Built-in Predicates
        • Windows DDE interface
          • DDE client interface
          • DDE server mode
            • dde_register_service/2
            • dde_unregister_service/1
            • dde_current_service/2
            • dde_current_connection/2
    • Packages

4.44.2 DDE server mode

The library(dde) defines primitives to realise simple DDE server applications in SWI-Prolog. These features are provided as of version 2.0.6 and should be regarded as prototypes. The C part of the DDE server can handle some more primitives, so if you need features not provided by this interface, please study library(dde).

dde_register_service(+Template, +Goal)
Register a server to handle DDE request or DDE execute requests from other applications. To register a service for a DDE request, Template is of the form:
+Service(+Topic, +Item, +Value)
Service is the name of the DDE service provided (like progman in the client example above). Topic is either an atom, indicating Goal only handles requests on this topic, or a variable that also appears in Goal. Item and Value are variables that also appear in Goal. Item represents the request data as a Prolog atom.168Up to version 3.4.5 this was a list of character codes. As recent versions have atom garbage collection there is no need for this anymore.

The example below registers the Prolog current_prolog_flag/2 predicate to be accessible from other applications. The request may be given from the same Prolog as well as from another application.

?- dde_register_service(prolog(current_prolog_flag, F, V),
                        current_prolog_flag(F, V)).

?- open_dde_conversation(prolog, current_prolog_flag, Handle),
   dde_request(Handle, home, Home),
   close_dde_conversation(Handle).

Home = '/usr/local/lib/pl-2.0.6/'

Handling DDE execute requests is very similar. In this case the template is of the form:

+Service(+Topic, +Item)

Passing a Value argument is not needed as execute requests either succeed or fail. If Goal fails, a‘not processed' is passed back to the caller of the DDE request.

dde_unregister_service(+Service)
Stop responding to Service. If Prolog is halted, it will automatically call this on all open services.
dde_current_service(-Service, -Topic)
Find currently registered services and the topics served on them.
dde_current_connection(-Service, -Topic)
Find currently open conversations.