DdeClientTransaction
The DdeClientTransaction
function begins a data transaction between a client and a server. Only a
dynamic data exchange (DDE) client application can call this function, and the
application can use it only after establishing a conversation with the server.
HDDEDATA DdeClientTransaction(
LPBYTE pData, |
// pointer to data
to pass to server |
DWORD cbData, |
// length of data |
HCONV hConv, |
// handle to
conversation |
HSZ hszItem, |
// handle to item
name string |
UINT wFmt, |
// clipboard data
format |
UINT wType, |
// transaction type |
DWORD dwTimeout, |
// time-out
duration |
LPDWORD pdwResult |
// pointer to transaction
result |
); |
|
Parameters
pData
Points to the
beginning of the data the client must pass to the server.
Optionally,
an application can specify the data handle (HDDEDATA) to pass to the server and
in that case the cbData parameter should be set to 0xFFFFFFFF. This
parameter is required only if the wType parameter is XTYP_EXECUTE
For the
optional usage of this parameter, XTYP_POKE transactions where pData is
a data handle, the handle must have been created by a previous call to the DdeCreateDataHandle
cbData
Specifies the
length, in bytes, of the data pointed to by the pData parameter. A value
of 0xFFFFFFFF indicates that pData is a data handle that identifies the
data being sent.
hConv
Identifies
the conversation in which the transaction is to take place.
hszItem
Identifies
the data item for which data is being exchanged during the transaction. This
handle must have been created by a previous call to the DdeCreateStringHandle
wFmt
Specifies the
standard clipboard format in which the data item is being submitted or
requested.
If the
transaction specified by the wType parameter does not pass data or is
XTYP_EXECUTE, this parameter should be zero.
If the
transaction specified by the wType parameter references non-execute DDE
data (XTYP_POKE, XTYP_ADVSTART, XTYP_ADVSTOP, XTYP_REQUEST), the wFmt
value must be either a valid predefined (CF_) DDE format or a valid registered
clipboard format.
wType
Specifies the
transaction type. This parameter can be one of the following types:
Type |
Meaning |
XTYP_ADVSTART |
Begins an
advise loop. Any number of distinct advise loops can exist within a
conversation. An application can alter the advise loop type by combining the
XTYP_ADVSTART transaction type with one or more of the following flags: |
Flag |
Meaning |
XTYPF_NODATA |
Instructs
the server to notify the client of any data changes without actually sending
the data. This flag gives the client the option of ignoring the notification
or requesting the changed data from the server. |
XTYPF_ACKREQ |
Instructs
the server to wait until the client acknowledges that it received the
previous data item before sending the next data item. This flag prevents a
fast server from sending data faster than the client can process it. |
XTYP_ADVSTOP |
Ends an advise
loop. |
XTYP_EXECUTE |
Begins an
execute transaction. |
XTYP_POKE |
Begins a
poke transaction. |
XTYP_REQUEST |
Begins a
request transaction. |
dwTimeout
Specifies the
maximum length of time, in milliseconds, that the client will wait for a
response from the server application in a synchronous transaction. This
parameter should be TIMEOUT_ASYNC for asynchronous transactions.
pdwResult
Points to a
variable that receives the result of the transaction. An application that does
not check the result can use NULL for this value. For synchronous transactions,
the low-order word of this variable contains any applicable DDE_ flags
resulting from the transaction. This provides support for applications
dependent on DDE_APPSTATUS bits. It is, however, recommended that applications
no longer use these bits because they may not be supported in future versions
of the Dynamic Data Exchange Management Library7M.XBY (DDEML). For asynchronous transactions, this
variable is filled with a unique transaction identifier for use with the DdeAbandonTransaction function and the
XTYP_XACT_COMPLETE transaction.
Return Values
If the
function succeeds, the return value is a data handle that identifies the data
for successful synchronous transactions in which the client expects data from
the server. The return value is nonzero for successful asynchronous
transactions and for synchronous transactions in which the client does not expect
data. The return value is zero for all unsuccessful transactions.
Errors
The DdeGetLastError
DMLERR_ADVACKTIMEOUT
DMLERR_BUSY
DMLERR_DATAACKTIMEOUT
DMLERR_DLL_NOT_INITIALIZED
DMLERR_EXECACKTIMEOUT
DMLERR_INVALIDPARAMETER
DMLERR_MEMORY_ERROR
DMLERR_NO_CONV_ESTABLISHED
DMLERR_NO_ERROR
DMLERR_NOTPROCESSED
DMLERR_POKEACKTIMEOUT
DMLERR_POSTMSG_FAILED
DMLERR_REENTRANCY
DMLERR_SERVER_DIED
DMLERR_UNADVACKTIMEOUT
Remarks
When an
application has finished using the data handle returned by DdeClientTransaction,
the application should free the handle by calling the DdeFreeDataHandle
Transactions
can be synchronous or asynchronous. During a synchronous transaction, DdeClientTransaction
does not return until the transaction either completes successfully or fails.
Synchronous transactions cause a client to enter a modal loop while waiting for
various asynchronous events. Because of this, a client application can still
respond to user input while waiting on a synchronous transaction, but the
application cannot begin a second synchronous transaction because of the
activity associated with the first. DdeClientTransaction fails if any
instance of the same task has a synchronous transaction already in progress.
During an
asynchronous transaction, DdeClientTransaction returns after the
transaction has begun, passing a transaction identifier for reference. When the
server s DDE callback function finishes processing an asynchronous transaction,
the system sends an XTYP_XACT_COMPLETE transaction to the client. This transaction
provides the client with the results of the asynchronous transaction that it initiated
by calling DdeClientTransaction. A client application can choose to
abandon an asynchronous transaction by calling the DdeAbandonTransaction
function.
See Also