出口链区域和出口链区域头 (MQACH)

如果需要,退出函数可以获取退出链区域的存储空间,并设置 MQAXP 中的ExitChainAreaPtr指向该存储空间。

出口 (相同或不同的出口功能) 可以获取多个出口链区域并将它们链接在一起。 仅当从出口处理程序调用时,才必须从此列表中添加或除去出口链区域。 这可确保不存在由不同线程同时添加或除去列表中的区域所导致的序列化问题。

出口链区域必须以 MQACH 头结构开头,其 C 声明为:

typedef struct tagMQACH {
   MQCHAR4   StrucId;             /* Structure identifier */
   MQLONG    Version;             /* Structure version number */
   MQLONG    StrucLength;         /* Length of the MQACH structure */
   MQLONG    ChainAreaLength;     /* Exit chain area length */
   MQCHAR48  ExitInfoName         /* Exit information name */
   PMQACH    NextChainAreaPtr;    /* Pointer to next exit chain area */
 };
出口链区域头中的字段为:
StrucId (MQCHAR4)-输入
出口链区域结构标识,具有 MQACH_STRUC_ID 的初始值 (由 MQACH_DEFAULT 定义)。

对于 C 程序,还定义了常量 MQACH_STRUC_ID_ARRAY; 这具有与 MQACH_STRUC_ID 相同的值,但作为字符数组而不是字符串。

版本 (MQLONG)-输入
结构版本号,如下所示:
MQACH_VERSION_1
出口参数结构的版本号。
mqach_current_version
出口上下文结构的当前版本号。
MQACH_DEFAULT 定义的此字段的初始值为 MQACH_CURRENT_VERSION
注: 如果引入此结构的新版本,那么现有部件的布局不会更改。 出口函数必须检查版本号是否等于或大于包含出口函数需要使用的字段的最低版本。
StrucLength (MQLONG)-输入
MQACH 结构的长度。 出口可以使用此字段来确定出口数据的开始,并将其设置为出口创建的结构的长度。

此字段的初始值 (由 MQACH_DEFAULT 定义) 为 MQACH_CURRENT_LENGTH。

ChainAreaLength(MQLONG)- 输入
出口链区域长度,设置为当前出口链区域的整体长度,包括 MQACH 头。

此字段的初始值 (由 MQACH_DEFAULT 定义) 为零。

ExitInfoNameMQCHAR48) - 输入
出口信息名称。

当一个出口创建 MQACH 结构时,它必须用自己的ExitInfoName,初始化这个字段,以便以后这个出口的另一个实例或合作出口可以找到这个 MQACH 结构。

此字段的初始值 (由 MQACH_DEFAULT 定义) 是长度为零的字符串 ({""})。

NextChainAreaPtr(PMQACH) - 输入
指向下一个出口链区域的指针,该区域具有由 MQACH_DEFAULT 定义的空指针 (NULL) 的初始值。
出口函数必须释放它们获取的任何出口链区域的存储器,并处理链指针以从列表中除去它们的出口链区域。
出口链区域可按如下所示构造:

MQAXP.ExitChainAreaPtr ───┬

  ┌───────────────────────┘

  └──→ ┌─────┬───┬────┬─────┬──────────────────────────────────────────────┬
       │ ACH │ 1 │ 80 │ ──┬ │ First exit's chain area                      │
       └─────┴───┴────┴───│─┴──────────────────────────────────────────────┘

  ┌───────────────────────┘

  └──→ ┌─────┬───┬────┬─────┬───────────────────────────┬
       │ ACH │ 1 │ 64 │ ──┬ │ Second exit's chain area  │
       └─────┴───┴────┴───│─┴───────────────────────────┘

  ┌───────────────────────┘

  └──→ ... etc.