DdeClientTransaction

【勇芳软件工作室】汉化HomePreviousNext

DdeClientTransaction函数开始客户端和服务器之间的数据事务。只有动态数据交换(DDE)客户端应用程序可以调用此函数,只有在与服务器建立对话之后,应用才可以使用它。

HDDEDATA DdeClientTransaction(

LPBYTE 【的pData】,//指向要传递到服务器的数据的指针
DWORD 【cbData】,//数据长度
HCONV 【hConv】,//处理对话
HSZ 【hszItem】,//处理项目名称字符串
UINT 【WFMT】,//剪贴板数据格式
UINT 【WTYPE】,//事务类型
DWORD 【dwTimeout】,//超时时间
LPDWORD 【pdwResult】//指向事务结果的指针
); 

参数

【的pData】

指向客户端必须传递到服务器的数据的开头。

可选地,应用程序可以指定传递给服务器的数据句柄(HDDEDATA),在这种情况下,【cbData】参数应设置为0xFFFFFFFF。仅当【WTYPE】参数为XTYP_EXECUTEXTYP_POKE时,才需要此参数。否则,此参数应为NULL。

对于此参数的可选用法,其中【的pData】是数据句柄的XTYP_POKE事务,该句柄必须由DdeCreateDataHandle函数先前调用创建,采用与【WFMT】参数中指定的相同的数据格式。

【cbData】

指定【的pData】参数指向的数据的长度(以字节为单位)。值0xFFFFFFFF表示【的pData】是标识要发送的数据的数据句柄。

【hConv】

标识要进行交易的对话。

【hszItem】

标识交易过程中正在交换数据的数据项。此句柄必须先前调用DdeCreateStringHandle函数创建。如果【WTYPE】参数为XTYP_EXECUTE,则此参数将被忽略(并且应设置为0L)。

【WFMT】

指定要提交或请求数据项的标准剪贴板格式。

如果由【WTYPE】参数指定的事务未通过数据或XTYP_EXECUTE,则该参数应为零。

如果【WTYPE】参数指定的事务引用不执行DDE数据(XTYP_POKE,XTYP_ADVSTART,XTYP_ADVSTOP,XTYP_REQUEST),则【WFMT】值必须是有效的预定义(CF_)DDE格式或有效的注册剪贴板格式。

【WTYPE】

指定事务类型。此参数可以是以下类型之一:

类型含义
XTYP_ADVSTART开始一个建议循环。会话中可以存在任何数量不同的建议循环。应用程序可以通过将XTYP_ADVSTART事务类型与一个或多个以下标志相结合来改变建议循环类型:

含义
XTYPF_NODATA指示服务器在不实际发送数据的情况下通知客户任何数据更改。该标志给客户端忽略通知或从服务器请求更改的数据的选项。
XTYPF_ACKREQ指示服务器等待,直到客户端确认它在发送下一个数据项之前收到之前的数据项。该标志防止快速服务器比客户端处理更快的数据发送数据。
XTYP_ADVSTOP结束一个建议循环。
XTYP_EXECUTE开始执行事务。
XTYP_POKE开始捅交易。
XTYP_REQUEST开始一个请求事务。

【dwTimeout】

指定客户端等待来自同步事务中的服务器应用程序的响应的最长时间长度(以毫秒为单位)。对于异步事务,此参数应为TIMEOUT_ASYNC。

【pdwResult】

指向接收事务结果的变量。不检查结果的应用程序可以对此值使用NULL。对于同步事务,此变量的低位字包含由事务产生的任何适用的DDE_标志。这提供了依赖于DDE_APPSTATUS位的应用程序的支持。但是,建议应用程序不再使用这些位,因为在以后版本的动态数据交换管理库(DDEML)中可能不支持这些位。对于异步事务,该变量用DdeAbandonTransaction函数和XTYP_XACT_COMPLETE事务使用的唯一事务标识符填充。

返回值

如果函数成功,则返回值是一个数据句柄,用于标识用于客户机期望来自服务器的数据的成功同步事务的数据。返回值对于成功的异步事务和客户端不期望数据的同步事务而言为非零。对于所有不成功的事务,返回值为零。

错误

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

备注

当应用程序使用DdeClientTransaction返回的数据句柄时,应用程序应该通过调用DdeFreeDataHandle函数来释放句柄。

事务可以是同步还是异步。在同步事务期间,DdeClientTransaction直到事务成功完成或失败才返回。同步事务导致客户端在等待各种异步事件时进入模态循环。因此,客户应用程序仍然可以在等待同步事务时响应用户输入,但由于与第一个事件相关联的活动,应用程序无法开始第二个同步事务。如果同一任务的任何实例具有同步事务已在进行中,则DdeClientTransaction将失败。

在异步事务期间,DdeClientTransaction在事务开始后返回,传递事务标识符以供参考。当服务器的DDE回调函数完成处理异步事务时,系统会向客户端发送一个XTYP_XACT_COMPLETE事务。此事务通过调用DdeClientTransaction向客户端提供其启动的异步事务的结果。客户端应用程序可以通过调用DdeAbandonTransaction函数来选择放弃异步事务。

也可以看看

DdeAbandonTransaction, DdeAccessData, DdeConnect, DdeConnectList, DdeCreateDataHandle, DdeCreateStringHandle, DdeFreeDataHandle, XTYP_ADVSTART, XTYP_ADVSTOP, XTYP_EXECUTE, XTYP_POKE, XTYP_REQUEST