付録E.1 C言語での実現例
- 〈この項の構成〉
(1) C言語での注意事項
(a) ヘッダファイル
ヘッダファイルは,メッセージキューイング機能で使用する定数などを定義し,C言語で記述されたアプリケーションプログラムでメッセージキューイング機能を使用できるようにします。ヘッダファイルを次に示します。
-
CMQC:MQIのプロトタイプ宣言,データタイプ,および定数を定義します。
なお,ヘッダファイルのファイル名を次に示すように,#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が定義した値には,文字列のフィールドに設定できる値もあります。この値は次に示す二つの方法で定義されています。
-
文字列の長さと一致するマクロ変数として定義します。
定義されたフィールド長と同じ長さの文字列として定義します。なお,この長さにはヌルは含みません。MQMD構造体のFormatフィールドには,次のマクロ変数を定義します。
#define MQFMT_STRING "MQSTR△△△" (△△△は空白を示します)
このマクロを使用するときは,memcpy関数およびmemcmp関数で操作してください。
-
文字の配列として定義します。
このマクロ変数の名称の最後には,"_ARRAY"が付きます。次にマクロ変数の定義例を示します。
#define MQFMT_STRING_ARRAY 'M','Q','S','T','R','△','△','△'
C++の場合,MQMD_DEFAULTマクロ変数で初期値が設定されています。この初期値と異なる値を使用したい場合は,この形式のマクロを使用してください。
(h) 動的構造体の初期値
必要な構造体の個数が決まっていない場合,calloc関数またはmalloc関数を使用して,動的にメモリを確保します。このようなフィールドを初期化する方法を次に示します。
-
構造体を初期化するため,MQXXX_DEFAULTマクロ変数を使用して構造体の変数を宣言します。この変数はほかの変数の初期値になります。
MQMD Model = {MQMD_DEFAULT}; /* 初期値の変数の定義 */静的変数か動的変数かを決めるために,staticまたはautoを指定できます。
-
calloc関数またはmalloc関数を使用して,構造体の動的変数用のメモリを確保します。
PMQMD Instance; Instance = malloc(sizeof(MQMD)); /* 動的変数用のメモリの取得 */ -
memcpy関数を使用して,初期値の変数を動的変数に複写します。
memcpy(Instance,&Model,sizeof(MQMD)); /* 動的変数の初期化 */
(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に示します。
|
データタイプ |
表記 |
|---|---|
|
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;