データタイプの概要
メッセージキューイング機能の命令で使用するデータタイプには次の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属性の説明を参照してください)。バウンダリ調整は必要ありません。
● 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構造体へのポインタです。
構造体データタイプ
構造体の扱い方は,プログラミング言語によって異なります。メッセージキューイング機能では,構造体について規則を定めています。この規則によって,それぞれのプログラミング言語で矛盾なく,構造体を使用できるようにしています。
構造体の規則を次に示します。
構造体データタイプの実現例については,「付録E 各プログラミング言語での実現例」を参照してください。