Creates or releases a topic name from a service name in a dynamic data exchange (DDE) conversation.
DDESetTopic(cServiceName, cTopicName [, cUDFName])
- Specifies the service name. Additional service names can be created with DDESetService(В ).
- Specifies the topic name to create or release. If you include cUDFName, DDESetTopic(В ) creates the topic name cTopicName. If you omit cUDFName, the topic name cTopicName is released. If cTopicName is an empty string, the user-defined function specified with cUDFName is executed for any topic name that is not explicitly declared.
Specifies the name of the user-defined function executed when a client application makes a request to the topic name. If you omit cUDFName, the topic name cTopicName is released from the service name.
When the user-defined function is executed, it is passed the following six parameters in the order given below:
The values of the Item, Data, and Advise Status parameters depend on the Action parameter. The following table lists the Action parameter values and the values contained in the Item, Data, and Advise Status parameters. A dash (вЂ“) indicates that the parameter value is the empty string.
The client channel number.
ADVISE, EXECUTE, INITIATE, POKE, REQUEST, or TERMINATE.
The item name; for example, R1C1 for a Microsoft Excel worksheet cell.
Data from the client.
The data format; for example, CF_TEXT.
The link type (0 = manual, 2 = notify or automatic).
If the user-defined function successfully handles the client request, the user-defined function should return true (.T.). If the request cannot be handled or an error occurs, the user-defined function should return false (.F.). If false is returned when the Action parameter value is INITIATE, the client topic name request is rejected. If false is returned when the value is POKE, REQUEST, or EXECUTE, the request is ignored. If false is returned when the value is ADVISE, the client request for a notify or automatic link is rejected.
Action value Item value Data value Advise status
After a topic name is created, any client requests to the topic name cause Visual FoxPro to execute the user-defined function specified with cUDFName. The user-defined function is passed a set of parameters whose values are determined by the client request. The user-defined function return value is passed to the client with DDEPoke(В ). The return value is a logical value indicating whether the topic name can provide the service requested by the client.
DDESetTopic(В ) returns true (.T.) if it successfully creates or releases the topic name. It returns false (.F.) if the topic name cannot be created or released. Use DDELastError(В ) to determine why a topic name cannot be created or released.
The following example creates a basic sample server called
myserver that supports Visual FoxPro command execution from a client application. The client application makes requests to
myserver through the DO topic, and macro substitution is used to execute the client's command.
*** Set Visual FoxPro up as a DDE server *** = DDESetService('myserver', 'DEFINE') = DDESetService('myserver', 'EXECUTE', .T.) = DDESetTopic('myserver', 'DO', 'DOTOPIC') WAIT WINDOW 'Server portion service setup ... ' NOWAIT *** Use Visual FoxPro as a DDE client *** gnChannel = DDEInitiate('myserver','DO') =DDEExecute(gnChannel, 'WAIT WINDOW "Command Executed ... "') =DDETerminate(gnChannel) PROCEDURE dotopic PARAMETERS gnChannel, gcAction, gcItem, gData, gcFormat, gnAdvise glResult = .F. *** It's necessary to return .T. from an *** *** INITIATE action or no connection is made *** IF gcAction = 'INITIATE' glResult = .T. ENDIF IF gcAction = 'EXECUTE' &gData glResult = .T. ENDIF IF gcAction = 'TERMINATE' WAIT WINDOW 'Goodbye ... ' NOWAIT glResult = .T. ENDIF RETURN glResult
After running this example program, you have set up Visual FoxPro service, which other applications can access. If you have Microsoft Excel, you can run the following Excel macro:
gnMyChan = INITIATE("myserver","DO") =EXECUTE(MyChan,"WAIT WINDOW 'Hi, this is EXCEL speaking'") =RETURN( )