付録E.1 C言語での実現例

<この項の構成>
(1) C言語での注意事項
(2) 関数
(3) 基本データタイプ
(4) 構造体データタイプ

(1) C言語での注意事項

(a) ヘッダファイル

ヘッダファイルは,メッセージキューイング機能で使用する定数などを定義し,C言語で記述されたアプリケーションプログラムでメッセージキューイング機能を使用できるようにします。ヘッダファイルを次に示します。

なお,ヘッダファイルのファイル名を次に示すように,#include指令で指定するとアプリケーションの移植性が良くなります。

#include "cmqc.h"

(b) 関数

入力専用,MQHCONN型,MQHOBJ型,またはMQLONG型の引数は値渡しです。そのほかの引数はアドレス渡しです。

関数が呼び出されるとき,アドレス渡しの引数を常に指定する必要はありません。特定の引数が必要でない場合,引数データにあるアドレスの関数の呼び出しでは,引数のアドレスとしてヌルを指定できます。引数のアドレスとしてヌルを指定できる引数については,「2. メッセージキューイング機能の命令」の各命令の説明を参照してください。

C言語では,関数の戻り値はありません。すべてvoid型で宣言されています。

(c) データタイプとして宣言されない引数

MQGET,MQPUT,およびMQPUT1関数には,データタイプとして宣言されない引数やバッファ引数があります。この引数はアプリケーションメッセージデータの受け渡しをするときに使用します。

データタイプとして宣言されない引数は,MQBYTE型の配列として宣言します。この方法で引数を宣言するほかに,メッセージのデータ構造を示す構造体として宣言することもできます。実際の関数の引数は,void型のポインタとして宣言されているため,どんなデータのアドレスも関数呼び出しの引数として指定できます。

(d) データタイプ

すべてのデータタイプは,C言語の記憶域クラス指定子typedefで定義されます。また,各データタイプのポインタ型のデータタイプも定義されます。ポインタ型のデータタイプ名は,ポインタを意味する"P"を先頭に付けた基本データタイプ名または構造体データタイプ名になります。ポインタの属性はMQPOINTER変数で定義します。次にポインタデータタイプの宣言の方法を示します。

#define MQPOINTER *               /* *を設定します          */
・・・
typedef MQLONG MQPOINTER PMQLONG; /* MQLONG型へのポインタ   */
typedef MQMD  MQPOINTER PMQMD;    /* MQMD型へのポインタ     */

(e) ビット列の操作

ビット列は,MQBYTEn型の一つとして宣言されます。この型のフィールドが複写,比較,または設定される場合は,C言語の関数(memcpy,memcmp,memset)を使用してください。次に使用例を示します。

#include <string.h>
#include "cmqc.h"

MQMD MyMsgDesc;

memcpy(MyMsgDesc.MsgId, /* ヌルをMsgIdフィールドに設定します */
      MQMI_NONE,       /* 定数を使用して設定します           */
      sizeof(MyMsgDesc.MsgId));

memset(MyMsgDesc.CorrelId,
                    /* ヌルをCorrelIdフィールドに設定します */
      0x00,         /* 定数を使用しないで設定します          */
      sizeof(MQBYTE24));

文字列を操作する関数(strcpy,strcmp,strncpy,strncmp)は,MQBYTEn型で宣言されたデータには使用できません。

(f) 文字列の操作

キューマネジャがアプリケーションに文字データを返す場合,そのデータ長がフィールド長に足りないときは余りを空白で埋めます。また,キューマネジャはヌルで終わる文字列を返しません。そのため,文字列を操作する関数(strncpy,strncmp,strncat)を使用してください。

ヌルで終わる文字列を操作する関数(strcpy,strcmp,strcat)は使用しないでください。フィールド長を調べるときは,sizeof演算子を使用してください。文字列の長さを決めるstrlen関数は使用しないでください。

(g) 構造体の初期値

ヘッダファイル(CMQC)は,MQの構造体に初期値を設定するときに使用するマクロ変数を定義します。これらのマクロ変数は,MQXXX_DEFAULTという形式の名称です。MQXXXは構造体の名称を示します。次にマクロ変数の使用例を示します。

MQMD  MyMsgDesc = {MQMD_DEFAULT};
MQPMO MyPutOpts = {MQPMO_DEFAULT};

MQIが定義した値には,文字列のフィールドに設定できる値もあります。この値は次に示す二つの方法で定義されています。

(h) 動的構造体の初期値

必要な構造体の個数が決まっていない場合,calloc関数またはmalloc関数を使用して,動的にメモリを確保します。このようなフィールドを初期化する方法を次に示します。

  1. 構造体を初期化するため,MQXXX_DEFAULTマクロ変数を使用して構造体の変数を宣言します。この変数はほかの変数の初期値になります。

    MQMD Model = {MQMD_DEFAULT};   /* 初期値の変数の定義 */

    静的変数か動的変数かを決めるために,staticまたはautoを指定できます。
  2. calloc関数またはmalloc関数を使用して,構造体の動的変数用のメモリを確保します。

    PMQMD Instance;
    Instance = malloc(sizeof(MQMD));
              /* 動的変数用のメモリの取得 */

  3. memcpy関数を使用して,初期値の変数を動的変数に複写します。

    memcpy(Instance,&Model,sizeof(MQMD)); /* 動的変数の初期化 */

(i) C++での使用

C++では次に示すステートメントが,ヘッダファイルに記述されています。

#ifdef_cplusplus
extern "C"{
#endif



#ifdef_cplusplus
}
#endif

(j) リンケージ方法

HP-UX,Windows,およびLinuxの場合,リンケージのコマンドに引数(-lmqa)を指定してください。

AIXの場合,リンケージのコマンドに引数(-lmqa2)を指定してください。

一つのロードモジュールにC言語およびCOBOL言語を混在できません。

(2) 関数

(a) MQCLOSE命令 - オブジェクトのクローズ

MQCLOSE(Hconn, &Hobj, Options, &CompCode, &Reason);

引数の宣言方法を次に示します。

MQHCONN Hconn;    /* コネクションハンドル */
MQHOBJ  Hobj;     /* オブジェクトハンドル */
MQLONG  Options;  /* クローズオプション   */
MQLONG  CompCode; /* 完了コード           */
MQLONG  Reason;   /* 理由コード           */

(b) MQCONN命令 - キューマネジャへの接続

MQCONN(Name, &Hconn, &CompCode, &Reason);

引数の宣言方法を次に示します。

MQCHAR48 Name;     /* キューマネジャ名     */
MQHCONN  Hconn;    /* コネクションハンドル */
MQLONG   CompCode; /* 完了コード           */
MQLONG   Reason;   /* 理由コード           */

(c) MQDISC命令 - キューマネジャからの切り離し

MQDISC(&Hconn, &CompCode, &Reason);

引数の宣言方法を次に示します。

MQHCONN Hconn;    /* コネクションハンドル */
MQLONG  CompCode; /* 完了コード           */
MQLONG  Reason;   /* 理由コード           */

(d) MQGET命令 - メッセージの取り出し

MQGET(Hconn, Hobj, &MsgDesc, &GetMsgOpts, BufferLength, Buffer,
&DataLength, &CompCode, &Reason);

引数の宣言方法を次に示します。

MQHCONN Hconn;        /* コネクションハンドル         */
MQHOBJ  Hobj;         /* オブジェクトハンドル         */
MQMD    MsgDesc;      /* メッセージ記述子             */
MQGMO   GetMsgOpts;   /* メッセージ取り出しオプション */
MQLONG  BufferLength; /* バッファ長                   */
MQBYTE  Buffer[n];    /* バッファ                     */
MQLONG  DataLength;   /* データ長                     */
MQLONG  CompCode;     /* 完了コード                   */
MQLONG  Reason;       /* 理由コード                   */

(e) MQINQ命令 - オブジェクトの属性の照会

MQINQ(Hconn, Hobj, SelectorCount, Selectors, IntAttrCount,
IntAttrs, CharAttrLength, CharAttrs, &CompCode, &Reason);

引数の宣言方法を次に示します。

MQHCONN Hconn;          /* コネクションハンドル */
MQHOBJ  Hobj;           /* オブジェクトハンドル */
MQLONG  SelectorCount;  /* セレクタ数           */
MQLONG  Selectors[n];   /* セレクタ             */
MQLONG  IntAttrCount;   /* 整数型属性数         */
MQLONG  IntAttrs[n];    /* 整数型属性値         */
MQLONG  CharAttrLength; /* 文字型属性長         */
MQCHAR  CharAttrs[n];   /* 文字型属性値         */
MQLONG  CompCode;       /* 完了コード           */
MQLONG  Reason;         /* 理由コード           */

(f) MQOPEN命令 - オブジェクトのオープン

MQOPEN(Hconn, &ObjDesc, Options, &Hobj, &CompCode, &Reason);

引数の宣言方法を次に示します。

MQHCONN Hconn;    /* コネクションハンドル */
MQOD    ObjDesc;  /* オブジェクト記述子   */
MQLONG  Options;  /* オープンオプション   */
MQHOBJ  Hobj;     /* オブジェクトハンドル */
MQLONG  CompCode; /* 完了コード           */
MQLONG  Reason;   /* 理由コード           */

(g) MQPUT命令 - メッセージの登録

MQPUT(Hconn, Hobj, &MsgDesc, &PutMsgOpts, BufferLength, Buffer,
&CompCode, &Reason);

引数の宣言方法を次に示します。

MQHCONN Hconn;        /* コネクションハンドル     */
MQHOBJ  Hobj;         /* オブジェクトハンドル     */
MQMD    MsgDesc;      /* メッセージ記述子         */
MQPMO   PutMsgOpts;   /* メッセージ登録オプション */
MQLONG  BufferLength; /* バッファ長               */
MQBYTE  Buffer[n];    /* バッファ                 */
MQLONG  CompCode;     /* 完了コード               */
MQLONG  Reason;       /* 理由コード               */

(h) MQPUT1命令 - 1メッセージの登録

MQPUT1(Hconn, &ObjDesc, &MsgDesc, &PutMsgOpts, BufferLength,
Buffer, &CompCode, &Reason);

引数の宣言方法を次に示します。

MQHCONN Hconn;        /* コネクションハンドル     */
MQOD    ObjDesc;      /* オブジェクト記述子       */
MQMD    MsgDesc;      /* メッセージ記述子         */
MQPMO   PutMsgOpts;   /* メッセージ登録オプション */
MQLONG  BufferLength; /* バッファ長               */
MQBYTE  Buffer[n];    /* バッファ                 */
MQLONG  CompCode;     /* 完了コード               */
MQLONG  Reason;       /* 理由コード               */

(i) MQSET命令 - オブジェクトの属性の設定

MQSET(Hconn, Hobj, SelectorCount, Selectors, IntAttrCount,
IntAttrs, CharAttrLength, CharAttrs, &CompCode, &Reason);

引数の宣言方法を次に示します。

MQHCONN Hconn;          /* コネクションハンドル */
MQHOBJ  Hobj;           /* オブジェクトハンドル */
MQLONG  SelectorCount;  /* セレクタ数           */
MQLONG  Selectors[n];   /* セレクタ             */
MQLONG  IntAttrCount;   /* 整数型属性数         */
MQLONG  IntAttrs[n];    /* 整数型属性値         */
MQLONG  CharAttrLength; /* 文字型属性長         */
MQCHAR  CharAttrs[n];   /* 文字型属性値         */
MQLONG  CompCode;       /* 完了コード           */
MQLONG  Reason;         /* 理由コード           */

(3) 基本データタイプ

基本データタイプの宣言を,表E-1に示します。

表E-1 基本データタイプの宣言(C言語)

データタイプ表記
MQBYTE型typedef unsigned char MQBYTE;
MQBYTE8型typedef MQBYTE MQBYTE8[8];
MQBYTE16型typedef MQBYTE MQBYTE16[16];
MQBYTE24型typedef MQBYTE MQBYTE24[24];
MQBYTE32型typedef MQBYTE MQBYTE32[32];
MQBYTE40型typedef MQBYTE MQBYTE40[40];
MQBYTE128型typedef MQBYTE MQBYTE128[128];
MQCHAR型typedef char MQCHAR;
MQCHAR4型typedef MQCHAR MQCHAR4[4];
MQCHAR8型typedef MQCHAR MQCHAR8[8];
MQCHAR12型typedef MQCHAR MQCHAR12[12];
MQCHAR20型typedef MQCHAR MQCHAR20[20];
MQCHAR28型typedef MQCHAR MQCHAR28[28];
MQCHAR32型typedef MQCHAR MQCHAR32[32];
MQCHAR48型typedef MQCHAR MQCHAR48[48];
MQCHAR64型typedef MQCHAR MQCHAR64[64];
MQCHAR128型typedef MQCHAR MQCHAR128[128];
MQCHAR256型typedef MQCHAR MQCHAR256[256];
MQHCONN型typedef MQLONG MQHCONN;
MQHOBJ型typedef MQLONG MQHOBJ;
MQLONG型

LP64データ型モデルの場合
 typedef int MQLONG;
その他の場合
 typedef long MQLONG;

MQPTR型typedef void MQPOINTER MQPTR;
MQULONG型

LP64データ型モデルの場合
 typedef unsigned int MQULONG;
その他の場合
 typedef unsigned long MQULONG;

PMQBYTE型typedef MQBYTE MQPOINTER PMQBYTE;
PMQBYTE8型typedef MQBYTE8[8] MQPOINTER PMQBYTE8[8];
PMQBYTE16型typedef MQBYTE16[16] MQPOINTER PMQBYTE16[16];
PMQBYTE24型typedef MQBYTE24[24] MQPOINTER PMQBYTE24[24];
PMQBYTE32型typedef MQBYTE32[32] MQPOINTER PMQBYTE32[32];
PMQBYTE40型typedef MQBYTE40[40] MQPOINTER PMQBYTE40[40];
PMQBYTE128型typedef MQBYTE128[128] MQPOINTER PMQBYTE128[128];
PMQCHAR型typedef MQCHAR MQPOINTER PMQCHAR;
PMQCHAR4型typedef MQCHAR4[4] MQPOINTER PMQCHAR4[4];
PMQCHAR8型typedef MQCHAR8[8] MQPOINTER PMQCHAR8[8];
PMQCHAR12型typedef MQCHAR12[12] MQPOINTER PMQCHAR12[12];
PMQCHAR20型typedef MQCHAR20[20] MQPOINTER PMQCHAR20[20];
PMQCHAR28型typedef MQCHAR28[28] MQPOINTER PMQCHAR28[28];
PMQCHAR32型typedef MQCHAR32[32] MQPOINTER PMQCHAR32[32];
PMQCHAR48型typedef MQCHAR48[48] MQPOINTER PMQCHAR48[48];
PMQCHAR64型typedef MQCHAR64[64] MQPOINTER PMQCHAR64[64];
PMQCHAR128型typedef MQCHAR128[128] MQPOINTER PMQCHAR128[128];
PMQCHAR256型typedef MQCHAR256[256] MQPOINTER PMQCHAR256[256];
PMQCHAR264型typedef MQCHAR264[264] MQPOINTER PMQCHAR264[264];
PMQDLH型typedef MQDLH MQPOINTER PMQDLH;
PMQGMO型typedef MQGMO MQPOINTER PMQGMO;
PMQHCONN型typedef MQHCONN MQPOINTER PMQHCONN;
PMQHOBJ型typedef MQHOBJ MQPOINTER PMQHOBJ;
PMQLONG型typedef MQLONG MQPOINTER PMQLONG;
PMQMD型typedef MQMD MQPOINTER PMQMD;
PMQMD1型typedef MQMD1[1] MQPOINTER PMQMD1[1];
PMQMDE型typedef MQMDE MQPOINTER PMQMDE;
PMQOD型typedef MQOD MQPOINTER PMQOD;
PMQPMO型typedef MQPMO MQPOINTER PMQPMO;
PMQPTR型typedef MQPTR MQPOINTER PMQPTR;
PMQRMH型typedef MQRMH MQPOINTER PMQRMH;
PMQTM型typedef MQTM MQPOINTER PMQTM;
PMQULONG型typedef MQULONG MQPOINTER PMQULONG;
PMQVOID型typedef void MQPOINTER PMQVOID;
PMQXQH型typedef MQXQH MQPOINTER PMQXQH;
PPMQBYTE型typedef PMQBYTE MQPOINTER PPMQBYTE;
PPMQCHAR型typedef PMQCHAR MQPOINTER PPMQCHAR;
PPMQGMO型typedef PMQGMO MQPOINTER PPMQGMO;
PPMQHCONN型typedef PMQHCONN MQPOINTER PPMQHCONN;
PPMQHOBJ型typedef PMQHOBJ MQPOINTER PPMQHOBJ;
PPMQLONG型typedef PMQLONG MQPOINTER PPMQLONG;
PPMQMD型typedef PMQMD MQPOINTER PPMQMD;
PPMQOD型typedef PMQOD MQPOINTER PPMQOD;
PPMQPMO型typedef PMQPMO MQPOINTER PPMQPMO;
PPMQULONG型typedef PMQULONG MQPOINTER PPMQULONG;
PPMQVOID型typedef PMQVOID MQPOINTER PPMQVOID;

(4) 構造体データタイプ

(a) MQCFH構造体 - PCFヘッダ

typedef struct tagMQCFH {
 MQLONG  Type;            /* 構造体タイプ             */
 MQLONG  StrucLength;     /* 構造体長                 */
 MQLONG  Version;         /* 構造体バージョン番号     */
 MQLONG  Command;         /* 命令識別子               */
 MQLONG  MsgSeqNumber;    /* メッセージシーケンス番号 */
 MQLONG  Control;         /* 制御オプション           */
 MQLONG  CompCode;        /* 完了コード               */
 MQLONG  Reason;          /* 理由コード               */
 MQLONG  ParameterCount;  /* 引数構造体の数           */
} MQCFH;

(b) MQCFIL構造体 - PCF整数リスト引数

typedef struct tagMQCFIL {
 MQLONG  Type;            /* 構造体タイプ */
 MQLONG  StrucLength;     /* 構造体長     */
 MQLONG  Parameter;       /* 引数識別子   */
 MQLONG  Count;           /* 引数値の数   */
 MQLONG  Values[1];       /* 引数の値     */
} MQCFIL;

(c) MQCFIN構造体 - PCF整数引数

typedef struct tagMQCFIN {
 MQLONG  Type;            /* 構造体タイプ */
 MQLONG  StrucLength;     /* 構造体長     */
 MQLONG  Parameter;       /* 引数識別子   */
 MQLONG  Value;           /* 引数の値     */
} MQCFIN;

(d) MQCFSL構造体 - PCF文字列リスト引数

typedef struct tagMQCFSL {
 MQLONG   Type;            /* 構造体タイプ     */
 MQLONG   StrucLength;     /* 構造体長         */
 MQLONG   Parameter;       /* 引数識別子       */
 MQLONG   CodedCharSetId;  /* 文字セット識別子 */
 MQLONG   Count;           /* 引数の値の数     */
 MQLONG   StringLength;    /* 文字列長         */
 MQCHAR   Strings;         /* 文字列の値       */
} MQCFSL;

(e) MQCFST構造体 - PCFストリング引数

typedef struct tagMQCFST {
 MQLONG  Type;            /* 構造体タイプ     */
 MQLONG  StrucLength;     /* 構造体長         */
 MQLONG  Parameter;       /* 引数識別子       */
 MQLONG  CodedCharSetId;  /* 文字セット識別子 */
 MQLONG  StringLength;    /* 文字列長         */
 MQCHAR  String[1];       /* 文字列の値       */
} MQCFST;

(f) MQDH構造体 - 配布ヘッダ

typedef struct tagMQDH {
 MQCHAR4  StrucId;         /* 構造体識別子                         */
 MQLONG   Version;         /* 構造体バージョン番号                 */
 MQLONG   StrucLength;     /* MQDH構造体とそれに続く
                              MQOR構造体とMQPMR構造体を足した長さ  */
 MQLONG   Encoding;        /* MQOR構造体およびMQPMR構造体に続く
                              データのマシンコード形式             */
 MQLONG   CodedCharSetId;  /* MQOR構造体およびMQPMR構造体に続く
                              データの文字セット識別子             */
 MQCHAR8  Format;          /* MQOR構造体およびMQPMR構造体に続く
                              データのフォーマット名               */
 MQLONG   Flags;           /* フラグ                               */
 MQLONG   PutMsgRecFields; /* MQPMR構造体フィールドの存在          */
 MQLONG   RecsPresent;     /* MQOR構造体の数                       */
 MQLONG   ObjectRecOffset; /* 最初のMQOR構造体までのオフセット     */
 MQLONG   PutMsgRecOffset; /* 最初のMQPMR構造体までのオフセット    */
} MQDH;

(g) MQDLH構造体 - デッドレターヘッダ

typedef struct tagMQDLH {
 MQCHAR4  StrucId;        /* 構造体識別子               */
 MQLONG   Version;        /* 構造体バージョン番号       */
 MQLONG   Reason;         /* メッセージ通知理由         */

 MQCHAR48 DestQName;      /* あて先キュー名             */
 MQCHAR48 DestQMgrName;   /* あて先キューマネジャ名     */
 MQLONG   Encoding;       /* MQDLH構造体に続く
                             データのマシンコード形式   */
 MQLONG   CodedCharSetId; /* MQDLH構造体に続く
                             データの文字セット識別子   */
 MQCHAR8  Format;         /* MQDLH構造体に続く
                             データのフォーマット名     */
 MQLONG   PutApplType;    /* 登録アプリケーションタイプ */
 MQCHAR28 PutApplName;    /* 登録アプリケーション名     */
 MQCHAR8  PutDate;        /* 登録日付                   */
 MQCHAR8  PutTime;        /* 登録時刻                   */
} MQDLH;

(h) MQGMO構造体 - メッセージ取り出しオプション

typedef struct tagMQGMO {
 MQCHAR4  StrucId;       /* 構造体識別子             */
 MQLONG   Version;       /* 構造体バージョン番号     */
 MQLONG   Options;       /* 取り出しオプション       */
 MQLONG   WaitInterval;  /* 待ち合わせ最大時間       */
 MQLONG   Signal1;       /* シグナル                 */
 MQLONG   Signal2;       /* 予備                     */
 MQCHAR48 ResolvedQName; /* 受信キュー名             */
 MQLONG   MatchOptions;  /* 一致オプション           */
 MQCHAR   GroupStatus;   /* メッセージグループフラグ */
 MQCHAR   SegmentStatus; /* 論理メッセージフラグ     */
 MQCHAR   Segmentation;  /* セグメント分割フラグ     */
 MQCHAR   Reserved1;     /* 予備                     */
} MQGMO;

(i) MQMD構造体 - メッセージ記述子

typedef struct tagMQMD {
 MQCHAR4  StrucId;          /* 構造体識別子               */
 MQLONG   Version;          /* 構造体バージョン番号       */
 MQLONG   Report;           /* 報告メッセージオプション   */
 MQLONG   MsgType;          /* メッセージタイプ           */
 MQLONG   Expiry;           /* メッセージ保持時間         */
 MQLONG   Feedback;         /* 報告メッセージ返答コード   */
 MQLONG   Encoding;         /* メッセージデータの
                                         マシンコード形式 */
 MQLONG   CodedCharSetId;   /* メッセージデータの
                                         文字セット識別子 */
 MQCHAR8  Format;           /* メッセージデータの
                                           フォーマット名 */
 MQLONG   Priority;         /* メッセージ優先度           */
 MQLONG   Persistence;      /* メッセージ永続性           */
 MQBYTE24 MsgId;            /* メッセージ識別子           */
 MQBYTE24 CorrelId;         /* 相関識別子                 */
 MQLONG   BackoutCount;     /* ロールバック回数           */
 MQCHAR48 ReplyToQ;         /* 応答キュー名               */
 MQCHAR48 ReplyToQMgr;      /* 応答キューマネジャ名       */
 MQCHAR12 UserIdentifier;   /* ユーザ識別子               */
 MQBYTE32 AccountingToken;  /* 課金トークン               */
 MQCHAR32 ApplIdentityData; /* アプリケーション識別データ */
 MQLONG   PutApplType;      /* 登録アプリケーションタイプ */
 MQCHAR28 PutApplName;      /* 登録アプリケーション名     */
 MQCHAR8  PutDate;          /* 登録日付                   */
 MQCHAR8  PutTime;          /* 登録時刻                   */
 MQCHAR4  ApplOriginData;   /* 登録元データ               */
 MQBYTE24 GroupId;          /* グループ識別子             */
 MQLONG   MsgSeqNumber;     /* メッセージシーケンス番号   */
 MQLONG   Offset;           /* オフセット                 */
 MQLONG   MsgFlags;         /* メッセージフラグ           */
 MQLONG   OriginalLength;   /* 登録元メッセージ長         */
} MQMD;

(j) MQMDE構造体 - メッセージ記述子の拡張

typedef struct tagMQMDE {
 MQCHAR4  StrucId;          /* 構造体識別子             */
 MQLONG   Version;          /* 構造体バージョン番号     */
 MQLONG   StrucLength       /* 構造体長                 */
 MQLONG   Encoding;         /* MQMDE構造体に続くデータの
                                       マシンコード形式 */
 MQLONG   CodedCharSetId;   /* MQMDE構造体に続くデータの
                                       文字セット識別子 */
 MQCHAR8  Format;           /* MQMDE構造体に続くデータの
                                         フォーマット名 */
 MQLONG   Flags;            /* フラグ                   */
 MQBYTE24 GroupId;          /* グループ識別子           */
 MQLONG   MsgSeqNumber;     /* メッセージシーケンス番号 */
 MQLONG   Offset;           /* オフセット               */
 MQLONG   MsgFlags;         /* メッセージフラグ         */
 MQLONG   OriginalLength;   /* 登録元メッセージ長       */
} MQMDE;

(k) MQOD構造体 - オブジェクト記述子

typedef struct tagMQOD {
 MQCHAR4  StrucId;           /* 構造体識別子                         */
 MQLONG   Version;           /* 構造体バージョン番号                 */
 MQLONG   ObjectType;        /* オブジェクトタイプ                   */
 MQCHAR48 ObjectName;        /* オブジェクト名                       */
 MQCHAR48 ObjectQMgrName;    /* オブジェクトキューマネジャ名         */
 MQCHAR48 DynamicQName;      /* 動的キュー名                         */
 MQCHAR12 AlternateUserId;   /* 代替ユーザ識別子                     */
 MQLONG   RecsPresent;       /* オブジェクトレコード数               */
 MQLONG   KnownDestCount;    /* ローカルキューの数                   */
 MQLONG   UnknownDestCount;  /* リモートキューの数                   */
 MQLONG   InvalidDestCount;  /* オープンに失敗したキューの数         */
 MQLONG   ObjectRecOffset;   /* 最初のオブジェクトレコードまでの
                                                      オフセット     */
 MQLONG   ResponseRecOffset; /* 最初の応答レコードまでのオフセット  */
 MQPTR    ObjectRecPtr;      /* 最初のオブジェクトレコードのアドレス */
 MQPTR    ResponseRecPtr;    /* 最初の応答レコードのアドレス         */
 MQBYTE40 AlternateSecurityId; /* 代替セキュリティ識別子          */
 MQCHAR48 ResolvedQName;     /* 解決したキュー名称                */
 MQCHAR48 ResolvedQMgrName;  /* 解決したキューマネジャ名称        */
} MQOD;

(l) MQOR構造体 - オブジェクトレコード

typedef struct tagMQOR {
 MQCHAR48 ObjectName;       /* オブジェクトキュー名         */
 MQCHAR48 ObjectQMgrName;   /* オブジェクトキューマネジャ名 */
} MQOR;

(m) MQPMO構造体 - メッセージ登録オプション

typedef struct tagMQPMO {
 MQCHAR4  StrucId;             /* 構造体識別子                     */
 MQLONG   Version;             /* 構造体バージョン番号             */
 MQLONG   Options;             /* 登録オプション                   */
 MQLONG   Timeout;             /* 予備                             */
 MQHOBJ   Context;             /* コンテキスト                     */
 MQLONG   KnownDestCount;      /* ローカルキューの数               */
 MQLONG   UnknownDestCount;    /* リモートキューの数               */
 MQLONG   InvalidDestCount;    /* 送信に失敗したキューの数         */
 MQCHAR48 ResolvedQName;       /* 受信キュー名                     */
 MQCHAR48 ResolvedQMgrName;    /* 受信キューマネジャ名             */
 MQLONG   RecsPresent;         /* 登録メッセージレコード数
                                    または応答レコード数 */
 MQLONG   PutMsgRecFields;     /* MQPMR構造体フィールドの存在      */
 MQLONG   PutMsgRecOffset;     /* 最初の登録メッセージレコードまでの
                                                        オフセット */
 MQLONG   ResponseRecOffset;   /* 最初の応答レコードまでの
                                                        オフセット */
 MQLONG   PutMsgRecPtr;        /* 最初の登録メッセージレコードの
                                                        アドレス   */
 MQLONG   ResponseRecPtr;      /* 最初の応答レコードのアドレス     */
} MQPMO;

(n) MQPMR構造体 - 登録メッセージレコード

typedef struct tagMQPMR {
 MQBYTE24   MsgId;           /* メッセージ識別子         */
 MQBYTE24   CorrelId;        /* 相関識別子               */
 MQBYTE24   GroupId;         /* グループ識別子           */
 MQLONG     Feedback;        /* 報告メッセージ返答コード */
 MQBYTE32   AccountingToken; /* 課金トークン             */
} MQPMR;

(o) MQRMH構造体 -メッセージ参照ヘッダ

typedef struct tagMQRMH {
 MQCHAR4  StrucId;           /* 構造体識別子                   */
 MQLONG   Version;           /* 構造体バージョン番号           */
 MQLONG   StrucLength;       /* 構造体長                       */
 MQLONG   Encoding;          /* 長大データのマシンコード形式   */
 MQLONG   CodedCharSetId;    /* 長大データの文字セット識別子   */
 MQCHAR8  Format;            /* 長大データのフォーマット名     */
 MQLONG   Flags;             /* フラグ                         */
 MQCHAR8  ObjectType;        /* オブジェクトタイプ             */
 MQBYTE24 ObjectInstanceId;  /* オブジェクトインスタンス識別子 */
 MQLONG   SrcEnvLength       /* 送信元環境データ長             */
 MQLONG   SrcEnvOffset       /* 送信元環境データオフセット     */
 MQLONG   SrcNameLength      /* 送信元オブジェクト名長         */
 MQLONG   SrcNameOffset      /* 送信元オブジェクトのオフセット */
 MQLONG   DestEnvLength      /* あて先環境データ長             */
 MQLONG   DestEnvOffset      /* あて先環境データオフセット     */
 MQLONG   DestNameLength     /* あて先オブジェクト名長         */
 MQLONG   DestNameOffset     /* あて先オブジェクトのオフセット */
 MQLONG   DataLogicalLength  /* 長大データ長                   */
 MQLONG   DataLogicalOffset   /* 長大データ低位オフセット      */
 MQLONG   DataLogicalOffset2 /* 長大データ高位オフセット       */
} MQRMH;

(p) MQRR構造体 - 応答レコード

typedef struct tagMQRR {
 MQLONG     CompCode; /* 完了コード */
 MQLONG     Reason;   /* 理由コード */
} MQRR;

(q) MQTM構造体 - トリガメッセージ

typedef struct tagMQTM {
 MQCHAR4   StrucId;     /* 構造体識別子           */
 MQLONG    Version;     /* 構造体バージョン番号   */
 MQCHAR48  QName;       /* イベント発生キュー名   */
 MQCHAR48  ProcessName; /* プロセス名             */
 MQCHAR64  TriggerData; /* トリガデータ           */
 MQLONG    ApplType;    /* アプリケーションタイプ */
 MQCHAR256 ApplId;      /* アプリケーション識別子 */
 MQCHAR128 EnvData;     /* 環境データ             */
 MQCHAR128 UserData;    /* ユーザデータ           */
} MQTM;

(r) MQXQH構造体 - 転送キューヘッダ

typedef struct tagMQXQH {
 MQCHAR4  StrucId;        /* 構造体識別子             */
 MQLONG   Version;        /* 構造体バージョン番号     */
 MQCHAR48 RemoteQName;    /* リモートキュー名         */
 MQCHAR48 RemoteQMgrName; /* リモートキューマネジャ名 */
 MQMD1    MsgDesc;        /* 登録元メッセージ記述子   */
} MQXQH;