データタイプの概要

メッセージキューイング機能の命令で使用するデータタイプには次の2種類があります。

この章では,プログラミング言語に依存しない形式でこれらのデータタイプを説明します。なお,これらのデータタイプは,ユーザ定義のデータタイプをサポートする言語(例:C言語)で宣言されるデータタイプに相当します。ただし,ユーザ定義のデータタイプは,基本データタイプとその組み合わせ(配列または構造体)で構成されます。

基本データタイプ

メッセージキューイング機能の命令では,次の基本データタイプを使用します。

MQBYTE:1バイト(8ビット列)

MQCHAR:1文字(定義された文字セットの中の,シングルキャラクタ文字)

MQLONG:整数(符号付き4バイト2進数)

ここで示すほかのデータタイプは,上記の基本データタイプと同じものか,それらを組み合わせたもの(配列または構造体)です。

基本データタイプの実現例については,「付録E 各プログラミング言語での実現例」を参照してください。

● MQBYTE型 - 1バイト

MQBYTE型データは,1バイトのデータを表します。バイトに対する特別な解釈はなく,2進数や文字としてではなく,ビット文字列として扱われます。バウンダリ調整は不要です。

文字セットとマシンコードが異なるキューマネジャ間でMQBYTEデータが送信される場合,MQBYTEデータは変換されません。MQMD構造体のMsgIdおよびCorrelIdフィールドについても同様です。

MQBYTE型の配列で,キューマネジャ管理外の記憶領域を表す場合があります。例えば,アプリケーションメッセージデータや構造体を格納する領域です。この領域のバウンダリ調整では,領域内のデータの性質と矛盾が起きないように注意してください。

C言語では,通常,MQBYTE型の配列で指定する引数はアドレスで渡されます。そのため,関数の引数をMQBYTE型の配列で指定すると,すべてのデータタイプを使用できます。C言語では,関数の該当する引数は,void型のポインタとして宣言されます。

● MQBYTEn型 - nバイト

MQBYTEn型データは,nバイトのバイト列を表します。nとして,次の値を取ることができます。

n:8,16,24,32,40,または128

それぞれのバイトは,MQBYTE型で記述されます。バウンダリ調整は必要ありません。

なお,バイト型属性の各フィールドの長さが,定数MQ_*として定義されています。

● MQCHAR型 - 1バイト文字

MQCHAR型データは,1バイトの文字,または2バイト文字やマルチバイト文字の1バイトを表します。

文字セットとマシンコードが異なるキューマネジャ間で,MQCHARデータが送信される場合,データが正しく解釈されるように通常はMQCHARデータの変換が必要です。MQMD構造体中のMQCHARデータについては,キューマネジャが自動的に変換を実行します。アプリケーションメッセージデータ内のMQCHARデータの変換については,MQGET命令発行時に指定するMQGMO_CONVERTオプションによって制御できます。

この文字の文字セット識別子には,該当するキューマネジャの文字セット識別子が使用されます(「3. オブジェクトの属性」の「キューマネジャの属性」で,CodedCharSetId属性の説明を参照してください)。バウンダリ調整は必要ありません。

注意
MQGET命令,MQPUT命令,およびMQPUT1命令で指定するアプリケーションメッセージデータは,MQBYTE型で記述します。MQCHAR型では記述しません。

● MQCHARn型 - nバイト文字列

MQCHARn型データは,nバイトの文字列を表します。nとして,次の値を取ることができます。

n:4,8,12,20,28,32,48,64,128,または256

それぞれの文字は,MQCHAR型で記述されます。バウンダリ調整は必要ありません。

定義された文字列の長さよりもデータが短いとき,余りを空白で埋める必要があります。場合によっては,空白で埋める代わりに,ヌル文字で最後尾を示してもかまいません。データ領域内のヌル文字以降の文字は,空白として扱われます。ヌル文字を使用できるかどうかについては,この章で説明する各構造体と,「2. メッセージキューイング機能の命令」で説明する各命令を参照してください。

キューマネジャからアプリケーションに文字列が返されるとき(例えば,MQGET命令),文字列の余りは空白で埋められます。キューマネジャはヌル文字を使用しません。

なお,文字型属性の各フィールドの長さが,定数MQ_*として定義されています。

● MQHCONN型 - コネクションハンドル

MQHCONN型データは,コネクションハンドルを表します。このデータは,特定のキューマネジャへの接続を示します。コネクションハンドルは,4バイトのバウンダリ調整が必要です。

注意
アプリケーションで必要なコネクションハンドルの操作は,値が等しいかどうかを調べることだけです。

● MQHOBJ型 - オブジェクトハンドル

MQHOBJ型データは,オブジェクトを利用するためのハンドルを表します。オブジェクトハンドルは,4バイトのバウンダリ調整が必要です。

注意
アプリケーションで必要なオブジェクトハンドルの操作は,値が等しいかどうかを調べることだけです。

● MQLONG型 - ロング整数

MQLONG型データは,32ビットの符号付き2進数字を表します。このデータは,環境(使用言語など)で制限されないかぎり,-2147483648から+2147483647の範囲で値を取ることができます。COBOL言語の場合は,-999999999から+999999999の範囲に制限されます。ロング整数は,4バイトのバウンダリ調整が必要です。

● MQPTR型 - ポインタ

MQPTR型データは,任意の型のアドレスです。ポインタは4バイト(32ビット版),または8バイト(64ビット版)のバウンダリ調整が必要です。

プログラミング言語で型付きポインタをサポートしていることがあり,MQIでも使用します。例えば,C言語のPMQCHARおよびPMQLONG型です。

● PMQCHAR型 - MQCHAR型データへのポインタ

PMQCHAR型データは,MQCHAR型データへのポインタです。

● PMQLONG型 - MQLONG型データへのポインタ

PMQLONG型データは,MQLONG型データへのポインタです。

● PMQMD型 - MQMD構造体へのポインタ

PMQMD型データは,MQMD構造体へのポインタです。

構造体データタイプ

構造体の扱い方は,プログラミング言語によって異なります。メッセージキューイング機能では,構造体について規則を定めています。この規則によって,それぞれのプログラミング言語で矛盾なく,構造体を使用できるようにしています。

構造体の規則を次に示します。

  1. 構造体はバウンダリ調整します。メッセージキューイング機能で使用する構造体の多くは,4バイトの倍数を先頭アドレスとします。
  2. 構造体中の各フィールドも,それぞれのデータタイプに応じてバウンダリ調整します。MQLONG型に相当するフィールドでは,4バイトの倍数を先頭アドレスとします。そのほかのフィールドでは,1バイト単位で先頭アドレスを設定できます。
  3. 構造体の長さは,バウンダリ調整の単位の倍数とします。メッセージキューイング機能で使用する構造体は,4バイトの倍数の長さになります。
  4. 上記の規則に適合するようにバイトやフィールドを追加してパディングします。

構造体データタイプの実現例については,「付録E 各プログラミング言語での実現例」を参照してください。