Confirmed (CPI-C)

确认调用 (函数名称 cmcfmd) 回复来自合作伙伴计划的确认请求。 它会通知合作伙伴计划,本地计划未在收到的数据中检测到错误。 由于发出确认请求的程序等待确认, 因此 Confirmed 会同步这两个程序的处理。

语法


CM_ENTRY Confirmed(   
  unsigned char FAR *conversation_ID,    
    CM_INT32 FAR *return_code              
);  

参数

conversation_ID
提供的参数。 指定会话的标识符。 此参数的值由 Initialize_ConversationAccept_Conversation 返回。

return_code
从此调用返回的代码。 本主题后面列出了有效的返回代码。

返回代码

CM_OK
主返回代码;调用已成功执行。

CM_OPERATION_NOT_ACCEPTED
主返回代码;对此会话的上一个操作不完整。

CM_OPERATION_INCOMPLETE
主返回代码;操作尚未完成, (处理模式是非阻止,仅) 且仍在进行中。 程序可以发出 Wait_For_Conversation 以等待操作完成,或 Cancel_Conversation 取消操作和会话。 如果已调用 Specify_Windows_Handle ,则应用程序应等待 Microsoft® Windows® 消息的通知,而不是 调用 Wait_For_Conversation

CM_PROGRAM_PARAMETER_CHECK
主返回代码; 由 conversation_ID 指定的值无效。

CM_PROGRAM_STATE_CHECK
主返回代码;当程序发出此调用时,对话未处于 CONFIRM、CONFIRM_SEND或CONFIRM_DEALLOCATE状态。

CM_PRODUCT_SPECIFIC_ERROR
主返回代码;发生特定于产品的错误,并且已记录在产品错误日志中。

状态更改

当程序发出 “确认”时,会话必须处于以下状态之一:

  • 确认

  • CONFIRM_SEND

  • CONFIRM_DEALLOCATE

    新状态由旧状态确定,即本地程序发布 “已确认”时会话的状态。 旧状态由前面的 Receive 调用的 status_received 值指示。 下表汇总了 return_code设置为CM_OK 时可能的状态更改。

旧状态 新状态
确认 RECEIVE
CONFIRM_SEND SEND
CONFIRM_DEALLOCATE RESET

其他返回代码不会导致状态更改。

注解

确认请求由合作伙伴计划中以下调用之一发出:

  • 确认

  • Prepare_To_Receive 准备接收类型是否设置为 CM_PREP_TO_RECEIVE_CONFIRM 或 CM_PREP_TO_RECEIVE_SYNC_LEVEL 且会话同步级别设置为 CM_CONFIRM。

  • 如果解除分配类型设置为 CM_DEALLOCATE_CONFIRM 或 CM_DEALLOCATE_SYNC_LEVEL 并且会话同步级别设置为 CM_CONFIRM,则解除分配。

  • 以下情况下Send_Data:

    • 发送类型设置为CM_SEND_AND_CONFIRM。

    • 发送类型设置为CM_SEND_AND_PREPARE_TO_RECEIVE准备接收类型设置为CM_PREPARE_TO_RECEIVE_CONFIRM。

    • 发送类型设置为 CM_SEND_AND_PREPARE_TO_RECEIVE,准备接收类型设置为 CM_PREPARE_TO_RECEIVE_SYNC_LEVEL,同步级别设置为 CM_CONFIRM。

    • 发送类型设置为CM_SEND_AND_DEALLOCATE,解除分配类型设置为CM_DEALLOCATE_CONFIRM。

    • 发送类型设置为 CM_SEND_AND_DEALLOCATE,解除分配类型设置为 CM_DEALLOCATE_SYNC_LEVEL,同步级别设置为 CM_CONFIRM。

    本地程序通过 Receivestatus_received 参数接收确认请求。 仅当 status_received 参数设置为以下值之一时,本地程序才能发出 Confirmed

  • CM_CONFIRM_RECEIVED

  • CM_CONFIRM_SEND_RECEIVED

  • CM_CONFIRM_DEALLOC_RECEIVED