Posts Tagged ‘MQ

使用MQ传输结构体信息

2007年12月06日 星期四

忙了一个星期终于搞掂了,心情顺畅,以此志之。

代码如下:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
MQDataInfo = record
ID : Integer;
Name : PAnsiChar;
Value : PAnsiChar;
Image : TBitmap;
end;
PMQDataInfo = ^MQDataInfo;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
LabeledEdit3: TLabeledEdit;
Button2: TButton;
Button3: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

uses MQI;

const
QM_NAME : MQCHAR48 = ‘MyTest’#0;
QUEUE_NAME : MQCHAR48 = ‘Test001′#0;

procedure TForm1.Button1Click(Sender: TObject);
var
Hconn : MQHCONN;
Hobj : MQHOBJ;
ConnectOpts : MQCNO;
QMgrName : MQCHAR48;
ObjDesc : MQOD;
Options, CompCode, Reason : MQLONG;
Buffer : MQDataInfo; //PAnsiChar;//Array[0..1024000] of Byte;
BufferLength : Integer;
MsgDesc : MQMD;
PutMsgOptions : MQPMO;
begin
QMgrName := QM_NAME;
ConnectOpts := MQCNO_DEFAULT;

MQCONNX ( @QMgrName, @ConnectOpts, @HConn, @Compcode, @Reason);

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Connect Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Connected successed’);
end;

Options := MQOO_FAIL_IF_QUIESCING + MQOO_OUTPUT;
ObjDesc := MQOD_DEFAULT;
ObjDesc.ObjectName := QUEUE_NAME;

MQOPEN (HConn, @ObjDesc, Options, @HObj, @Compcode, @Reason );

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Open Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Open Successed’);
end;

MsgDesc := MQMD_DEFAULT;
PutMsgOptions := MQPMO_DEFAULT;

Buffer.ID := 100;
Buffer.Name := ‘Name001′#0;
Buffer.Value := ‘Value001′#0;
Buffer.Image := TBitmap.Create;
Buffer.Image.Assign(Self.Image1.Picture.Bitmap);

BufferLength := sizeof(Buffer);

MQPUT(HConn, Hobj, @MsgDesc, @PutMsgOptions, BufferLength, @Buffer, @Compcode, @Reason);

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Put Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Put Successed’);
end;

Options := MQCO_NONE;
MQCLOSE ( HConn, @Hobj, Options, @Compcode, @Reason);

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Close Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Close Successed’);
end;

MQDISC ( @HConn, @Compcode, @Reason );

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Disconnect Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Disconnected successed’);
end;

Self.Memo1.Lines.Add(‘———————-’);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Hconn : MQHCONN;
Hobj : MQHOBJ;
ConnectOpts : MQCNO;
QMgrName : MQCHAR48;
ObjDesc : MQOD;
Options, CompCode, Reason : MQLONG;
Buffer : MQDataInfo;// Array[0..1024000] of Char;
BufferLength : Integer;
MsgDesc : MQMD;
GetMsgOptions : MQGMO;
DataLength : MQLONG;
begin
QMgrName := QM_NAME;
ConnectOpts := MQCNO_DEFAULT;

MQCONNX ( @QMgrName, @ConnectOpts, @HConn, @Compcode, @Reason);

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Connect Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Connected successed’);
end;

Options := MQOO_FAIL_IF_QUIESCING + MQOO_INPUT_AS_Q_DEF;
ObjDesc := MQOD_DEFAULT;
ObjDesc.ObjectName := QUEUE_NAME;

MQOPEN (HConn, @ObjDesc, Options, @HObj, @Compcode, @Reason );

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Open Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Open Successed’);
end;

BufferLength := sizeof(Buffer);
DataLength := 0;
MsgDesc := MQMD_DEFAULT;
GetMsgOptions := MQGMO_DEFAULT;

MQGET(HConn, Hobj, @MsgDesc, @GetMsgOptions, BufferLength, @Buffer, @DataLength, @Compcode, @Reason);

if CompCode <> MQCC_OK then
begin
//队列无消息信息
if Reason = MQRC_NO_MSG_AVAILABLE then
begin
Self.Memo1.Lines.Add(‘The queue is empty’);
end
else
begin
Self.Memo1.Lines.Add(‘Get Failed’);
end;
end
else
begin
Self.LabeledEdit1.Text := IntToStr(Buffer.ID);
Self.LabeledEdit2.Text := Buffer.Name;
Self.LabeledEdit3.Text := Buffer.Value;
Self.Image1.Picture.Bitmap.Assign(Buffer.Image);

Self.Memo1.Lines.Add(‘Get Successed’);
end;

Options := MQCO_NONE;
MQCLOSE ( HConn, @Hobj, Options, @Compcode, @Reason);

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Close Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Close Successed’);
end;

MQDISC ( @HConn, @Compcode, @Reason );

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Disconnect Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Disconnected successed’);
end;

Self.Memo1.Lines.Add(‘———————-’);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Self.LabeledEdit1.Text := ‘0′;
Self.LabeledEdit2.Text := ”;
Self.LabeledEdit3.Text := ”;
Self.Image1.Picture.Assign(nil);
end;

end.

测试服务器到服务器的MQ传输

2007年12月06日 星期四

测试服务器到服务器:
要测试安装,必须设置两个工作站,一个作为发送方,另一个作为接收方。
1.设置发送方工作站:
1.1.创建名为“saturn.queue.manager”的缺省队列管理器。
命令为:crtmqm -q saturn.queue.manager
消息显示已创建该队列管理器,并且创建了缺省WebSphere MQ对象。
1.2.启动缺省队列管理器。
命令为:strmqm
队列管理器启动时,将显示信息。
1.3.启动MQSC命令。
命令为:runmqsc
MQSC启动时,显示消息“启动WebSphere MQ命令”。MQSC不使用命令提示。
1.4.定义一个本地队列,作为名为Transmit1.queue的传输队列。
命令:define qlocal(transmit1.queue) usage(xmitq)
创建队列时,显示消息“已创建WebSphere MQ队列”。
1.5.创建远程队列的本地定义。
命令:define qremote(local.def.remote.queue) rname(orange.queue)
rqmname(‘venus.queue.manager’) xnitq(transmit1.queue)
rname参数指定该消息将要发送到远程机器上的队列名称。
因此,rname参数指定的名称必须是向其发送消息的队列名称(即接收方工作站的Orange.queue)。
1.6.定义发送方通道。
命令:define channel(first.channel) chltype(sdr) conname(con-name)
xmitq(transmit1.queue) trptype(tcp)
值con-name是接收方工作站的TCP/IP地址。
1.7.停止MQSC。
命令:end
—————————————————
现在,已经定义了一下对象:
1.名为saturn.queue.manager的缺省队列管理器
2.名为Transmit1.queue的传输队列
3.名为Local.def.of.remote.queue的远程队列
4.名为First.Channel的发送方通道
2.设置接收方工作站:
2.1.创建名为venus.queue.manager的缺省队列管理器。
命令:crtmqm -q venus.queue.manager
消息显示已创建该队列管理器,并且创建了缺省WebSphere MQ对象。
2.2.启动队列管理器。
命令:strmqm
队列管理器启动时,将显示消息。
2.3.启动WebSphere MQ侦听器。
命令:runmqlsr -t tcp
侦听器启动时,将显示消息。
2.4.打开一个新的命令提示窗口,准备发出MQSC命令。
命令:runmqsc
MQSC启动时,显示消息“启动WebSphere MQ命令”。MQSC不使用命令提示。
2.5.定义名为Orange.Queue的本地队列。
命令:define qlocal(orange.queue)
创建队列时,显示消息“已创建WebSphere MQ队列”。
2.6.创建接收方通道。
命令:define channel(first.channel) chltype(rcvr) trptype(tcp)
2.7.停止MQSC。
命令:end
——————————————
现在,已经定义了以下对象:
1.名为venus.queue.manager的缺省队列管理器
2.名为Orange.Queue的队列
3.名为First.Channel的接收方通道
3.测试工作站之间的通信:
3.1.如果两个工作站已停止,则使用strmqm命令重新启动它们。
3.2.在发送方工作站上,启动发送方通道。
命令:runmqchl -c FIRST.CHANNEL -m saturn.queue.manager
启动发送方通道时,将自动启动接收方工作站上的接收方通道。
3.3.在发送方工作站上,打开一个新的命令提示窗口并更改到Bin目录。
3.4.将消息放入队列。
命令:amqsput LOCAL.DEF.OF.REMOTE.QUEUE
这个命令将消息放入远程队列的本地定义(它指定远程队列名称)。
3.5.输入消息文本,然后按两次Enter键。
3.6.在接收方工作站上,更改到Bin目录。
3.7.从队列中获取消息。
命令:amqsget ORANGE.QUEUE
样本程序启动,并显示消息。暂停后,样本结束并再次显示命令提示符。

验证本地MQ安装

2007年12月06日 星期四

设置:使用以下步骤来安装队列管理器和队列:
1.创建名为venus.queue.manager的缺省队列管理器。
命令:crtmqm -q venus.queue.manager
消息显示已创建该队列管理器,并且创建了缺省WebSphere MQ对象。
2.启动缺省队列管理器。
命令:strmqm
队列管理器启动时,将显示消息。
3.启用MQSC命令。
命令:runmqsc
MQSC会话启动时,将显示消息“启动WebSphere MQ命令”。MQSC不使用命令提示。
4.定义名为Orange.Queue的本地队列。
命令:define qlocal(orange.queue)
MQSC中的任何小写文本都将自动转换成大写,除非用引号将它们括起来。
这意味着如果用名称Orange.Queue创建了队列,则在MQSC以外的其它命令中必须使ORANGE.QUEUE。
创建队列时,显示消息“已创建WebSphere MQ队列”。
5.停止MQSC。
命令:end
显示以下消息,随后再次显示命令提示:
读取了一条MQSC命令。
命令未发生语法错误。
处理所有有效的MQSC命令。
——————————————————–
现在,已经定义了以下对象:
1.名为venus.queue.manager的缺省队列管理器
2.名为ORANGE.QUEUE的队列
测试:
要测试队列和队列管理器,请使用样本程序amqsput和amqsget:
1.更改到文件夹:Bin。
2.将消息放入队列。
命令:amqsput ORANGE.QUEUE
显示以下消息:
Sample amqsput0 start
target queue is ORANGE.QUEUE
3.输入一些消息文本,然后按Enter键两次。显示以下消息:
Sample amqsput0 end
现在消息已经在队列中并且再次显示命令提示。
4.从队列获取消息。
命令:amqsget ORANGE.QUEUE
样本程序启动,并显示您的消息。暂停后,样本结束并再次显示命令提示符。

现在完成了本地安装的验证。

MQ中简单的消息发送和接收的单元文件MQI.pas

2007年12月06日 星期四

以下内容是单元文件MQI.pas的正文
MQI.pas是对mqm.dll的Delphi封装接口(版权归原作者)

unit MQI;

interface

const
MQOD_STRUC_ID = ‘OD ‘;
MQOD_VERSION_1 = 1;
MQOD_VERSION_2 = 2;
MQOD_VERSION_3 = 3;
MQOD_CURRENT_VERSION = 3;

MQPMO_STRUC_ID = ‘PMO ‘;
MQPMO_VERSION_1 = 1;
MQPMO_VERSION_2 = 2;
MQPMO_CURRENT_VERSION = 2;

MQGMO_STRUC_ID = ‘GMO ‘;
MQGMO_VERSION_1 = 1;
MQGMO_VERSION_2 = 2;
MQGMO_VERSION_3 = 3;
MQGMO_CURRENT_VERSION = 3;

MQMD_STRUC_ID = ‘MD ‘;
MQMD_VERSION_1 = 1;
MQMD_VERSION_2 = 2;
MQMD_CURRENT_VERSION = 2;

MQMDE_STRUC_ID = ‘MDE ‘;
MQMDE_VERSION_2 = 2;
MQMDE_CURRENT_VERSION = 2;

MQBO_STRUC_ID = ‘BO ‘;
MQBO_VERSION_1 = 1;
MQBO_CURRENT_VERSION = 1;

MQSCO_STRUC_ID = ‘SCO ‘;
MQSCO_VERSION_1 = 1;
MQSCO_CURRENT_VERSION = 1;

MQAIR_STRUC_ID = ‘AIR ‘;
MQAIR_VERSION_1 = 1;
MQAIR_CURRENT_VERSION = 1;

MQCNO_STRUC_ID = ‘CNO ‘;
MQCNO_VERSION_1 = 1;
MQCNO_VERSION_2 = 2;
MQCNO_VERSION_3 = 3;
MQCNO_VERSION_4 = 4;
MQCNO_CURRENT_VERSION = 4;

MQRFH_STRUC_ID = ‘RFH ‘;
MQRFH_VERSION_1 = 1;
MQRFH_VERSION_2 = 2;

MQDH_STRUC_ID = ‘DH ‘;
MQDH_VERSION_1 = 1;
MQDH_CURRENT_VERSION = 1;

MQDLH_STRUC_ID = ‘DLH ‘;
MQDLH_VERSION_1 = 1;
MQDLH_CURRENT_VERSION = 1;

MQCIH_STRUC_ID = ‘CIH ‘;
MQCIH_VERSION_1 = 1;
MQCIH_VERSION_2 = 2;
MQCIH_CURRENT_VERSION = 2;

MQIIH_STRUC_ID = ‘IIH ‘;
MQIIH_VERSION_1 = 1;
MQIIH_CURRENT_VERSION = 1;

MQRMH_STRUC_ID = ‘RMH ‘;
MQRMH_VERSION_1 = 1;
MQRMH_CURRENT_VERSION = 1;

MQTM_STRUC_ID = ‘TM ‘;
MQTM_VERSION_1 = 1;
MQTM_CURRENT_VERSION = 1;

MQTMC_STRUC_ID = ‘TMC ‘;
MQTMC_VERSION_1 = ‘ 1′;
MQTMC_VERSION_2 = ‘ 2′;
MQTMC_CURRENT_VERSION = ‘ 2′;

MQWIH_STRUC_ID = ‘WIH ‘;
MQWIH_VERSION_1 = 1;
MQWIH_CURRENT_VERSION = 1;

MQXQH_STRUC_ID = ‘XQH ‘;
MQXQH_VERSION_1 = 1;
MQXQH_CURRENT_VERSION = 1;

{Object types}
MQOT_Q = 1;
MQOT_NAMELIST = 2;
MQOT_PROCESS = 3;
MQOT_STORAGE_CLASS = 4;
MQOT_Q_MGR = 5;
MQOT_CHANNEL = 6;
MQOT_AUTH_INFO = 7;
MQOT_CF_STRUC = 10;
MQOT_RESERVED_1 = 999;

{Connect Options}
MQCNO_STANDARD_BINDING = {row.content}000000;
MQCNO_FASTPATH_BINDING = {row.content}000001;
MQCNO_HANDLE_SHARE_NONE = {row.content}000020;
MQCNO_HANDLE_SHARE_BLOCK = {row.content}000040;
MQCNO_HANDLE_SHARE_NO_BLOCK = {row.content}000080;
MQCNO_NONE = {row.content}000000;

{Open Options}
MQOO_INPUT_AS_Q_DEF = {row.content}000001;
MQOO_INPUT_SHARED = {row.content}000002;
MQOO_INPUT_EXCLUSIVE = {row.content}000004;
MQOO_BROWSE = {row.content}000008;
MQOO_OUTPUT = {row.content}000010;
MQOO_INQUIRE = {row.content}000020;
MQOO_SET = {row.content}000040;
MQOO_BIND_ON_OPEN = {row.content}004000;
MQOO_BIND_NOT_FIXED = {row.content}008000;
MQOO_BIND_AS_Q_DEF = {row.content}000000;
MQOO_SAVE_ALL_CONTEXT = {row.content}000080;
MQOO_PASS_IDENTITY_CONTEXT = {row.content}000100;
MQOO_PASS_ALL_CONTEXT = {row.content}000200;
MQOO_SET_IDENTITY_CONTEXT = {row.content}000400;
MQOO_SET_ALL_CONTEXT = {row.content}000800;
MQOO_ALTERNATE_USER_AUTHORITY = {row.content}001000;
MQOO_FAIL_IF_QUIESCING = {row.content}002000;
MQOO_RESOLVE_NAMES = {row.content}010000;

{Report options}
MQRO_EXCEPTION = 000000;
MQRO_EXCEPTION_WITH_DATA = 000000;
MQRO_EXCEPTION_WITH_FULL_DATA = 000000;
MQRO_EXPIRATION = {row.content}200000;
MQRO_EXPIRATION_WITH_DATA = {row.content}600000;
MQRO_EXPIRATION_WITH_FULL_DATA = {row.content}E00000;
MQRO_COA = {row.content}000100;
MQRO_COA_WITH_DATA = {row.content}000300;
MQRO_COA_WITH_FULL_DATA = {row.content}000700;
MQRO_COD = {row.content}000800;
MQRO_COD_WITH_DATA = {row.content}001800;
MQRO_COD_WITH_FULL_DATA = {row.content}003800;
MQRO_PAN = {row.content}000001;
MQRO_NAN = {row.content}000002;
MQRO_NEW_MSG_ID = {row.content}000000;
MQRO_PASS_MSG_ID = {row.content}000080;
MQRO_COPY_MSG_ID_TO_CORREL_ID = {row.content}000000;
MQRO_PASS_CORREL_ID = {row.content}000040;
MQRO_DEAD_LETTER_Q = {row.content}000000;
MQRO_DISCARD_MSG = 000000;
MQRO_NONE = {row.content}000000;

{Close options}
MQCO_NONE = 0;
MQCO_DELETE = 1;
MQCO_DELETE_PURGE = 2;

{Message types}
MQMT_SYSTEM_FIRST = 1;
MQMT_REQUEST = 1;
MQMT_REPLY = 2;
MQMT_DATAGRAM = 8;
MQMT_REPORT = 4;
MQMT_MQE_FIELDS_FROM_MQE = 112;
MQMT_MQE_FIELDS = 113;
MQMT_SYSTEM_LAST = 65535;
MQMT_APPL_FIRST = 65536;
MQMT_APPL_LAST = 999999999;

{Expiry}
MQEI_UNLIMITED = -1;

{Begin Options}
MQBO_NONE = {row.content}000000;

{Feedback values}
MQFB_NONE = 0;
MQFB_SYSTEM_FIRST = 1;
MQFB_QUIT = 256;
MQFB_EXPIRATION = 258;
MQFB_COA = 259;
MQFB_COD = 260;
MQFB_CHANNEL_COMPLETED = 262;
MQFB_CHANNEL_FAIL_RETRY = 263;
MQFB_CHANNEL_FAIL = 264;
MQFB_APPL_CANNOT_BE_STARTED = 265;
MQFB_TM_ERROR = 266;
MQFB_APPL_TYPE_ERROR = 267;
MQFB_STOPPED_BY_MSG_EXIT = 268;
MQFB_XMIT_Q_MSG_ERROR = 271;
MQFB_PAN = 275;
MQFB_NAN = 276;
MQFB_STOPPED_BY_CHAD_EXIT = 277;
MQFB_STOPPED_BY_PUBSUB_EXIT = 279;
MQFB_NOT_A_REPOSITORY_MSG = 280;
MQFB_BIND_OPEN_CLUSRCVR_DEL = 281;
MQFB_DATA_LENGTH_ZERO = 291;
MQFB_DATA_LENGTH_NEGATIVE = 292;
MQFB_DATA_LENGTH_TOO_BIG = 293;
MQFB_BUFFER_OVERFLOW = 294;
MQFB_LENGTH_OFF_BY_ONE = 295;
MQFB_IIH_ERROR = 296;
MQFB_NOT_AUTHORIZED_FOR_IMS = 298;
MQFB_IMS_ERROR = 300;
MQFB_IMS_FIRST = 301;
MQFB_IMS_LAST = 399;
MQFB_CICS_INTERNAL_ERROR = 401;
MQFB_CICS_NOT_AUTHORIZED = 402;
MQFB_CICS_BRIDGE_FAILURE = 403;
MQFB_CICS_CORREL_ID_ERROR = 404;
MQFB_CICS_CCSID_ERROR = 405;
MQFB_CICS_ENCODING_ERROR = 406;
MQFB_CICS_CIH_ERROR = 407;
MQFB_CICS_UOW_ERROR = 408;
MQFB_CICS_COMMAREA_ERROR = 409;
MQFB_CICS_APPL_NOT_STARTED = 410;
MQFB_CICS_APPL_ABENDED = 411;
MQFB_CICS_DLQ_ERROR = 412;
MQFB_CICS_UOW_BACKED_OUT = 413;
MQFB_SYSTEM_LAST = 65535;
MQFB_APPL_FIRST = 65536;
MQFB_APPL_LAST = 999999999;

{Encoding}
MQENC_NATIVE = {row.content}000222;
MQENC_INTEGER_MASK = {row.content}00000F;
MQENC_DECIMAL_MASK = {row.content}0000F0;
MQENC_FLOAT_MASK = {row.content}000F00;
MQENC_RESERVED_MASK = $FFFFF000;
MQENC_INTEGER_UNDEFINED = {row.content}000000;
MQENC_INTEGER_NORMAL = {row.content}000001;
MQENC_INTEGER_REVERSED = {row.content}000002;
MQENC_FLOAT_UNDEFINED = {row.content}000000;
MQENC_FLOAT_IEEE_NORMAL = {row.content}000100;
MQENC_FLOAT_IEEE_REVERSED = {row.content}000200;
MQENC_FLOAT_S390 = {row.content}000300;
MQENC_DECIMAL_UNDEFINED = {row.content}000000;
MQENC_DECIMAL_NORMAL = {row.content}000010;
MQENC_DECIMAL_REVERSED = {row.content}000020;

{Coded Character-Set Identifiers}
MQCCSI_UNDEFINED = 0;
MQCCSI_DEFAULT = 0;
MQCCSI_Q_MGR = 0;
MQCCSI_INHERIT = -2;
MQCCSI_EMBEDDED = -1;

{Formats}
MQFMT_NONE = ‘ ‘;
MQFMT_ADMIN = ‘MQADMIN ‘;
MQFMT_CHANNEL_COMPLETED = ‘MQCHCOM ‘;
MQFMT_CICS = ‘MQCICS ‘;
MQFMT_COMMAND_1 = ‘MQCMD1 ‘;
MQFMT_COMMAND_2 = ‘MQCMD2 ‘;
MQFMT_DEAD_LETTER_HEADER = ‘MQDEAD ‘;
MQFMT_DIST_HEADER = ‘MQHDIST ‘;
MQFMT_EVENT = ‘MQEVENT ‘;
MQFMT_IMS = ‘MQIMS ‘;
MQFMT_IMS_VAR_STRING = ‘MQIMSVS ‘;
MQFMT_MD_EXTENSION = ‘MQHMDE ‘;
MQFMT_PCF = ‘MQPCF ‘;
MQFMT_REF_MSG_HEADER = ‘MQHREF ‘;
MQFMT_RF_HEADER = ‘MQHRF ‘;
MQFMT_RF_HEADER_2 = ‘MQHRF2 ‘;
MQFMT_STRING = ‘QSTR ‘;
MQFMT_TRIGGER = ‘MQTRIG ‘;
MQFMT_WORK_INFO_HEADER = ‘MQHWIH ‘;

{Message Flags}
MQMF_SEGMENTATION_INHIBITED = {row.content}000000;
MQMF_SEGMENTATION_ALLOWED = {row.content}000001;
MQMF_MSG_IN_GROUP = {row.content}000008;
MQMF_LAST_MSG_IN_GROUP = {row.content}000010;
MQMF_SEGMENT = {row.content}000002;
MQMF_LAST_SEGMENT = {row.content}000004;
MQMF_NONE = {row.content}000000;
MQMF_REJECT_UNSUP_MASK = {row.content}000FFF;
MQMF_ACCEPT_UNSUP_MASK = $FFF00000;
MQMF_ACCEPT_UNSUP_IF_XMIT_MASK = {row.content}0FF000;

{Application types}
MQAT_UNKNOWN = -1;
MQAT_NO_CONTEXT = 0;
MQAT_CICS = 1;
MQAT_MVS = 2;
MQAT_OS390 = 2;
MQAT_ZOS = 2;
MQAT_IMS = 3;
MQAT_OS2 = 4;
MQAT_DOS = 5;
MQAT_AIX = 6;
MQAT_UNIX = 6;
MQAT_QMGR = 7;
MQAT_OS400 = 8;
MQAT_WINDOWS = 9;
MQAT_CICS_VSE = 10;
MQAT_WINDOWS_NT = 11;
MQAT_VMS = 12;
MQAT_GUARDIAN = 13;
MQAT_NSK = 13;
MQAT_VOS = 14;
MQAT_IMS_BRIDGE = 19;
MQAT_XCF = 20;
MQAT_CICS_BRIDGE = 21;
MQAT_NOTES_AGENT = 22;
MQAT_USER = 25;
MQAT_BROKER = 26;
MQAT_JAVA = 28;
MQAT_DQM = 29;
MQAT_CHANNEL_INITIATOR = 30;
MQAT_DEFAULT = 6;
MQAT_USER_FIRST = 65536;
MQAT_USER_LAST = 999999999;

{Put-message options}
MQPMO_SYNCPOINT = {row.content}000002;
MQPMO_NO_SYNCPOINT = {row.content}000004;
MQPMO_NEW_MSG_ID = {row.content}000040;
MQPMO_NEW_CORREL_ID = {row.content}000080;
MQPMO_LOGICAL_ORDER = {row.content}008000;
MQPMO_NO_CONTEXT = {row.content}004000;
MQPMO_DEFAULT_CONTEXT = {row.content}000020;
MQPMO_PASS_IDENTITY_CONTEXT = {row.content}000100;
MQPMO_PASS_ALL_CONTEXT = {row.content}000200;
MQPMO_SET_IDENTITY_CONTEXT = {row.content}000400;
MQPMO_SET_ALL_CONTEXT = {row.content}000800;
MQPMO_ALTERNATE_USER_AUTHORITY = {row.content}001000;
MQPMO_FAIL_IF_QUIESCING = {row.content}002000;
MQPMO_NONE = {row.content}000000;

{Put Message Record Fields}
MQPMRF_MSG_ID = {row.content}000001;
MQPMRF_CORREL_ID = {row.content}000002;
MQPMRF_GROUP_ID = {row.content}000004;
MQPMRF_FEEDBACK = {row.content}000008;
MQPMRF_ACCOUNTING_TOKEN = {row.content}000010;
MQPMRF_NONE = {row.content}000000;

{Get-message options}
MQGMO_WAIT = {row.content}000001;
MQGMO_NO_WAIT = {row.content}000000;
MQGMO_SET_SIGNAL = {row.content}000008;
MQGMO_FAIL_IF_QUIESCING = {row.content}002000;
MQGMO_SYNCPOINT = {row.content}000002;
MQGMO_SYNCPOINT_IF_PERSISTENT = {row.content}001000;
MQGMO_NO_SYNCPOINT = {row.content}000004;
MQGMO_MARK_SKIP_BACKOUT = {row.content}000080;
MQGMO_BROWSE_FIRST = {row.content}000010;
MQGMO_BROWSE_NEXT = {row.content}000020;
MQGMO_BROWSE_MSG_UNDER_CURSOR = {row.content}000800;
MQGMO_MSG_UNDER_CURSOR = {row.content}000100;
MQGMO_LOCK = {row.content}000200;
MQGMO_UNLOCK = {row.content}000400;
MQGMO_ACCEPT_TRUNCATED_MSG = {row.content}000040;
MQGMO_CONVERT = {row.content}004000;
MQGMO_LOGICAL_ORDER = {row.content}008000;
MQGMO_COMPLETE_MSG = {row.content}010000;
MQGMO_ALL_MSGS_AVAILABLE = {row.content}020000;
MQGMO_ALL_SEGMENTS_AVAILABLE = {row.content}040000;
MQGMO_NONE = {row.content}000000;

{String Lengths}
MQ_ABEND_CODE_LENGTH = 4;
MQ_ACCOUNTING_TOKEN_LENGTH = 32;
MQ_APPL_IDENTITY_DATA_LENGTH = 32;
MQ_APPL_NAME_LENGTH = 28;
MQ_APPL_ORIGIN_DATA_LENGTH = 4;
MQ_APPL_TAG_LENGTH = 28;
MQ_ATTENTION_ID_LENGTH = 4;
MQ_AUTH_INFO_CONN_NAME_LENGTH = 264;
MQ_AUTH_INFO_DESC_LENGTH = 64;
MQ_AUTH_INFO_NAME_LENGTH = 48;
MQ_AUTHENTICATOR_LENGTH = 8;
MQ_BRIDGE_NAME_LENGTH = 24;
MQ_CANCEL_CODE_LENGTH = 4;
MQ_CF_STRUC_DESC_LENGTH = 64;
MQ_CF_STRUC_NAME_LENGTH = 12;
MQ_CHANNEL_DATE_LENGTH = 12;
MQ_CHANNEL_DESC_LENGTH = 64;
MQ_CHANNEL_NAME_LENGTH = 20;
MQ_CHANNEL_TIME_LENGTH = 8;
MQ_CLUSTER_NAME_LENGTH = 48;
MQ_CONN_NAME_LENGTH = 264;
MQ_CONN_TAG_LENGTH = 128;
MQ_CORREL_ID_LENGTH = 24;
MQ_CREATION_DATE_LENGTH = 12;
MQ_CREATION_TIME_LENGTH = 8;
MQ_DATE_LENGTH = 12;
MQ_DISTINGUISHED_NAME_LENGTH = 1024;
MQ_EXIT_DATA_LENGTH = 32;
MQ_EXIT_NAME_LENGTH = 128;
MQ_EXIT_PD_AREA_LENGTH = 48;
MQ_EXIT_USER_AREA_LENGTH = 16;
MQ_FACILITY_LENGTH = 8;
MQ_FACILITY_LIKE_LENGTH = 4;
MQ_FORMAT_LENGTH = 8;
MQ_FUNCTION_LENGTH = 4;
MQ_GROUP_ID_LENGTH = 24;
MQ_LDAP_PASSWORD_LENGTH = 32;
MQ_LOCAL_ADDRESS_LENGTH = 48;
MQ_LTERM_OVERRIDE_LENGTH = 8;
MQ_LUWID_LENGTH = 16;
MQ_MAX_EXIT_NAME_LENGTH = 128;
MQ_MAX_MCA_USER_ID_LENGTH = 64;
MQ_MAX_USER_ID_LENGTH = 64;
MQ_MCA_JOB_NAME_LENGTH = 28;
MQ_MCA_NAME_LENGTH = 20;
MQ_MCA_USER_ID_LENGTH = 12;
MQ_MFS_MAP_NAME_LENGTH = 8;
MQ_MODE_NAME_LENGTH = 8;
MQ_MSG_HEADER_LENGTH = 4000;
MQ_MSG_ID_LENGTH = 24;
MQ_MSG_TOKEN_LENGTH = 16;
MQ_NAMELIST_DESC_LENGTH = 64;
MQ_NAMELIST_NAME_LENGTH = 48;
MQ_OBJECT_INSTANCE_ID_LENGTH = 24;
MQ_OBJECT_NAME_LENGTH = 48;
MQ_PASSWORD_LENGTH = 12;
MQ_PROCESS_APPL_ID_LENGTH = 256;
MQ_PROCESS_DESC_LENGTH = 64;
MQ_PROCESS_ENV_DATA_LENGTH = 128;
MQ_PROCESS_NAME_LENGTH = 48;
MQ_PROCESS_USER_DATA_LENGTH = 128;
MQ_PUT_APPL_NAME_LENGTH = 28;
MQ_PUT_DATE_LENGTH = 8;
MQ_PUT_TIME_LENGTH = 8;
MQ_Q_DESC_LENGTH = 64;
MQ_Q_MGR_DESC_LENGTH = 64;
MQ_Q_MGR_IDENTIFIER_LENGTH = 48;
MQ_Q_MGR_NAME_LENGTH = 48;
MQ_Q_NAME_LENGTH = 48;
MQ_QSG_NAME_LENGTH = 4;
MQ_REMOTE_SYS_ID_LENGTH = 4;
MQ_SECURITY_ID_LENGTH = 40;
MQ_SERVICE_NAME_LENGTH = 32;
MQ_SERVICE_STEP_LENGTH = 8;
MQ_SHORT_CONN_NAME_LENGTH = 20;
MQ_SSL_CIPHER_SPEC_LENGTH = 32;
MQ_SSL_CRYPTO_HARDWARE_LENGTH = 256;
MQ_SSL_HANDSHAKE_STAGE_LENGTH = 32;
MQ_SSL_KEY_REPOSITORY_LENGTH = 256;
MQ_SSL_PEER_NAME_LENGTH = 1024;
MQ_SSL_SHORT_PEER_NAME_LENGTH = 256;
MQ_START_CODE_LENGTH = 4;
MQ_STORAGE_CLASS_DESC_LENGTH = 64;
MQ_STORAGE_CLASS_LENGTH = 8;
MQ_SUB_IDENTITY_LENGTH = 128;
MQ_TIME_LENGTH = 8;
MQ_TOTAL_EXIT_DATA_LENGTH = 999;
MQ_TOTAL_EXIT_NAME_LENGTH = 999;
MQ_TP_NAME_LENGTH = 64;
MQ_TRAN_INSTANCE_ID_LENGTH = 16;
MQ_TRANSACTION_ID_LENGTH = 4;
MQ_TRIGGER_DATA_LENGTH = 64;
MQ_USER_ID_LENGTH = 12;
MQ_XCF_GROUP_NAME_LENGTH = 8;
MQ_XCF_MEMBER_NAME_LENGTH = 16;

{Unit of Work Control}
MQCUOWC_ONLY = {row.content}000111;
MQCUOWC_CONTINUE = {row.content}010000;
MQCUOWC_FIRST = {row.content}000011;
MQCUOWC_MIDDLE = {row.content}000010;
MQCUOWC_LAST = {row.content}000110;
MQCUOWC_COMMIT = {row.content}000100;
MQCUOWC_BACKOUT = {row.content}001100;

{Character-Attribute Selectors}
MQCA_ALTERATION_DATE = 2027;
MQCA_ALTERATION_TIME = 2028;
MQCA_APPL_ID = 2001;
MQCA_AUTH_INFO_CONN_NAME = 2053;
MQCA_AUTH_INFO_DESC = 2046;
MQCA_AUTH_INFO_NAME = 2045;
MQCA_BACKOUT_REQ_Q_NAME = 2019;
MQCA_BASE_Q_NAME = 2002;
MQCA_CF_STRUC_DESC = 2052;
MQCA_CF_STRUC_NAME = 2039;
MQCA_CHANNEL_AUTO_DEF_EXIT = 2026;
MQCA_CLUSTER_DATE = 2037;
MQCA_CLUSTER_NAME = 2029;
MQCA_CLUSTER_NAMELIST = 2030;
MQCA_CLUSTER_Q_MGR_NAME = 2031;
MQCA_CLUSTER_TIME = 2038;
MQCA_CLUSTER_WORKLOAD_DATA = 2034;
MQCA_CLUSTER_WORKLOAD_EXIT = 2033;
MQCA_COMMAND_INPUT_Q_NAME = 2003;
MQCA_CREATION_DATE = 2004;
MQCA_CREATION_TIME = 2005;
MQCA_DEAD_LETTER_Q_NAME = 2006;
MQCA_DEF_XMIT_Q_NAME = 2025;
MQCA_ENV_DATA = 2007;
MQCA_FIRST = 2001;
MQCA_IGQ_USER_ID = 2041;
MQCA_INITIATION_Q_NAME = 2008;
MQCA_LAST = 4000;
MQCA_LAST_USED = 2053;
MQCA_LDAP_PASSWORD = 2048;
MQCA_LDAP_USER_NAME = 2047;
MQCA_NAMELIST_DESC = 2009;
MQCA_NAMELIST_NAME = 2010;
MQCA_NAMES = 2020;
MQCA_PROCESS_DESC = 2011;
MQCA_PROCESS_NAME = 2012;
MQCA_Q_DESC = 2013;
MQCA_Q_MGR_DESC = 2014;
MQCA_Q_MGR_IDENTIFIER = 2032;
MQCA_Q_MGR_NAME = 2015;
MQCA_Q_NAME = 2016;
MQCA_QSG_NAME = 2040;
MQCA_REMOTE_Q_MGR_NAME = 2017;
MQCA_REMOTE_Q_NAME = 2018;
MQCA_REPOSITORY_NAME = 2035;
MQCA_REPOSITORY_NAMELIST = 2036;
MQCA_SSL_CRL_NAMELIST = 2050;
MQCA_SSL_CRYPTO_HARDWARE = 2051;
MQCA_SSL_KEY_REPOSITORY = 2049;
MQCA_STORAGE_CLASS = 2022;
MQCA_STORAGE_CLASS_DESC = 2042;
MQCA_TRIGGER_DATA = 2023;
MQCA_USER_DATA = 2021;
MQCA_USER_LIST = 4000;
MQCA_XCF_GROUP_NAME = 2043;
MQCA_XCF_MEMBER_NAME = 2044;
MQCA_XMIT_Q_NAME = 2024;

{Integer-Attribute Selectors}
MQIA_APPL_TYPE = 1;
MQIA_ARCHIVE = 60;
MQIA_AUTH_INFO_TYPE = 66;
MQIA_AUTHORITY_EVENT = 47;
MQIA_BACKOUT_THRESHOLD = 22;
MQIA_CF_LEVEL = 70;
MQIA_CF_RECOVER = 71;
MQIA_CHANNEL_AUTO_DEF = 55;
MQIA_CHANNEL_AUTO_DEF_EVENT = 56;
MQIA_CLUSTER_Q_TYPE = 59;
MQIA_CLUSTER_WORKLOAD_LENGTH = 58;
MQIA_CODED_CHAR_SET_ID = 2;
MQIA_COMMAND_LEVEL = 31;
MQIA_CONFIGURATION_EVENT = 51;
MQIA_CURRENT_Q_DEPTH = 3;
MQIA_DEF_BIND = 61;
MQIA_DEF_INPUT_OPEN_OPTION = 4;
MQIA_DEF_PERSISTENCE = 5;
MQIA_DEF_PRIORITY = 6;
MQIA_DEFINITION_TYPE = 7;
MQIA_DIST_LISTS = 34;
MQIA_EXPIRY_INTERVAL = 39;
MQIA_FIRST = 1;
MQIA_HARDEN_GET_BACKOUT = 8;
MQIA_HIGH_Q_DEPTH = 36;
MQIA_IGQ_PUT_AUTHORITY = 65;
MQIA_INDEX_TYPE = 57;
MQIA_INHIBIT_EVENT = 48;
MQIA_INHIBIT_GET = 9;
MQIA_INHIBIT_PUT = 10;
MQIA_INTRA_GROUP_QUEUING = 64;
MQIA_LAST = 2000;
MQIA_LAST_USED = 66;
MQIA_LOCAL_EVENT = 49;
MQIA_MAX_HANDLES = 11;
MQIA_MAX_MSG_LENGTH = 13;
MQIA_MAX_PRIORITY = 14;
MQIA_MAX_Q_DEPTH = 15;
MQIA_MAX_UNCOMMITTED_MSGS = 33;
MQIA_MSG_DELIVERY_SEQUENCE = 16;
MQIA_MSG_DEQ_COUNT = 38;
MQIA_MSG_ENQ_COUNT = 37;
MQIA_NAME_COUNT = 19;
MQIA_NAMELIST_TYPE = 72;
MQIA_OPEN_INPUT_COUNT = 17;
MQIA_OPEN_OUTPUT_COUNT = 18;
MQIA_PAGESET_ID = 62;
MQIA_PERFORMANCE_EVENT = 53;
MQIA_PLATFORM = 32;
MQIA_Q_DEPTH_HIGH_EVENT = 43;
MQIA_Q_DEPTH_HIGH_LIMIT = 40;
MQIA_Q_DEPTH_LOW_EVENT = 44;
MQIA_Q_DEPTH_LOW_LIMIT = 41;
MQIA_Q_DEPTH_MAX_EVENT = 42;
MQIA_Q_SERVICE_INTERVAL = 54;
MQIA_Q_SERVICE_INTERVAL_EVENT = 46;
MQIA_Q_TYPE = 20;
MQIA_QSG_DISP = 63;
MQIA_REMOTE_EVENT = 50;
MQIA_RETENTION_INTERVAL = 21;
MQIA_SCOPE = 45;
MQIA_SHAREABILITY = 23;
MQIA_SSL_TASKS = 69;
MQIA_START_STOP_EVENT = 52;
MQIA_SYNCPOINT = 30;
MQIA_TIME_SINCE_RESET = 35;
MQIA_TRIGGER_CONTROL = 24;
MQIA_TRIGGER_DEPTH = 29;
MQIA_TRIGGER_INTERVAL = 25;
MQIA_TRIGGER_MSG_PRIORITY = 26;
MQIA_TRIGGER_TYPE = 28;
MQIA_USAGE = 12;
MQIA_USER_LIST = 2000;

{Return Code}
MQCRC_OK = 0;
MQCRC_CICS_EXEC_ERROR = 1;
MQCRC_MQ_API_ERROR = 2;
MQCRC_BRIDGE_ERROR = 3;
MQCRC_BRIDGE_ABEND = 4;
MQCRC_APPLICATION_ABEND &nbs

MQ中简单的消息发送和接收

2007年12月06日 星期四

对mqm.dll动态链接库的封装接口
通过MQI.pas提供的接口函数我们可以很容易的发送和接收简单的文本信息
因为只是例子,所以命名不标准,注释不规范,好在代码简单,容易读懂

窗体文件不提供了,相信看到代码也应该能猜出来了

整个单元代码文件如下:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MQI;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
private
{ Private declarations }
Hconn : MQHCONN;
Hobj : MQHOBJ;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

const
QM_NAME : MQCHAR48 = ‘MyTest’#0;
QUEUE_NAME : MQCHAR48 = ‘Test001′#0;

procedure TForm1.Button1Click(Sender: TObject);
var
ConnectOpts : MQCNO;
CompCode, Reason : MQLONG;
QMgrName : MQCHAR48;
begin
Self.Memo1.Lines.Add(‘Begin connect…’);

QMgrName := QM_NAME;
ConnectOpts := MQCNO_DEFAULT;

MQCONNX ( @QMgrName, @ConnectOpts, @(Self.HConn), @Compcode, @Reason);

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Connect Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Connected successed’);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
ObjDesc : MQOD;
Options, CompCode, Reason : MQLONG;
begin
{ Calling the MQCONN procedure to get a valid connection handle was left out ! }
Options := MQOO_FAIL_IF_QUIESCING + MQOO_OUTPUT + MQOO_INPUT_SHARED;
ObjDesc := MQOD_DEFAULT;
ObjDesc.ObjectName := QUEUE_NAME;

MQOPEN (Self.HConn, @ObjDesc, Options, @Self.HObj, @Compcode, @Reason );

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Open Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Open Successed’);
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
Options, CompCode, Reason : MQLONG;
begin
{ Calling the MQOPEN procedure to get a valid object handle was left out ! }
Options := MQCO_NONE;
MQCLOSE ( Self.HConn, @Self.Hobj, Options, @Compcode, @Reason);

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Close Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Close Successed’);
end;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
ObjDesc : MQOD;
MsgDesc : MQMD;
PutMsgOptions : MQPMO;
BufferLength : MQLONG;
Buffer : array [0..1024] of Char;
CompCode, Reason : MQLONG;
begin
{ Calling the MQCONN procedure to get a valid connection handle was left out ! }
Buffer := ‘This message was sent from Delphi by put1′#0;
BufferLength := Length(Trim(Buffer));
ObjDesc := MQOD_DEFAULT;
ObjDesc.ObjectName := QUEUE_NAME;

MsgDesc := MQMD_DEFAULT;
PutMsgOptions := MQPMO_DEFAULT;

//在MQ的13个函数中,MQPUT1实现了这样一种功能,
//即它合并了MQOPEN, MQPUT, MQCLOSE三个函数的功能,
//在打开队列并且只希望发送一条消息时,它的CPU消耗比上述三个函数相加要少。
MQPUT1 ( Self.HConn, @ObjDesc, @MsgDesc, @PutMsgOptions, BufferLength, @Buffer, @Compcode, @Reason );

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Put1 Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Put1 Successed’);
end;
end;

procedure TForm1.Button5Click(Sender: TObject);
var
MsgDesc : MQMD;
PutMsgOptions : MQPMO;
BufferLength : MQLONG;
Buffer : array [0..1024] of Char;
CompCode, Reason : MQLONG;
begin
{ Calling the MQCONN or MQCONNX and MQOPEN procedure to get a valid }
{ connection handle and object handle was left out ! }
Buffer := ‘This message was sent from Delphi by put’#0;
BufferLength := Length(Trim(Buffer));
MsgDesc := MQMD_DEFAULT;
PutMsgOptions := MQPMO_DEFAULT;

MQPUT(Self.HConn, Self.Hobj, @MsgDesc, @PutMsgOptions, BufferLength, @Buffer, @Compcode, @Reason);

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Put Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Put Successed’);
end;
end;

procedure TForm1.Button6Click(Sender: TObject);
var
MsgDesc : MQMD;
GetMsgOptions : MQGMO;
DataLength : MQLONG;
BufferLength : Integer;
Buffer : array [0..1024] of Char;
CompCode, Reason : MQLONG;
begin
{ Calling the MQCONN or MQCONNX and MQOPEN procedure to get a valid }
{ connection handle and object handle was left out ! }
BufferLength := 1024;
DataLength := 0;
MsgDesc := MQMD_DEFAULT;
GetMsgOptions := MQGMO_DEFAULT;

//———————————
// GetMsgOptions.Options := MQGMO_WAIT + MQGMO_FAIL_IF_QUIESCING + MQGMO_ALL_MSGS_AVAILABLE;
// GetMsgOptions.WaitInterval := 10000;
//———————————

MQGET(Self.HConn, Self.Hobj, @MsgDesc, @GetMsgOptions, BufferLength, Buffer,
@DataLength, @Compcode, @Reason);

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Get Failed’);
end
else
begin
Self.Memo1.Lines.Add(Buffer);
Self.Memo1.Lines.Add(‘Get Successed’);
end;
end;

procedure TForm1.Button7Click(Sender: TObject);
var
ObjDesc : MQOD;
Selectors : array [0..2] of MQLONG;
Options, CompCode, Reason : MQLONG;
QMgrName : MQCHAR48;
Buffer : array [0..1024] of Char;
ConnectOpts : MQCNO;
begin
QMgrName := QM_NAME;
ConnectOpts := MQCNO_DEFAULT;
// MQCONNX ( @QMgrName, @Self.HConn, @Compcode, @Reason);
MQCONNX ( @QMgrName, @ConnectOpts, @Self.HConn, @Compcode, @Reason);

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Connect Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Connect Successed’);
end;

ObjDesc := MQOD_DEFAULT;

with ObjDesc do
begin
ObjectQmgrName := QMgrName;
ObjectType := MQOT_Q_MGR;
end;

Options := MQOO_INQUIRE + MQOO_FAIL_IF_QUIESCING;
MQOPEN (Self.HConn, @ObjDesc, Options, @Self.HObj, @Compcode, @Reason );

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Open Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Open Successed’);
end;

Selectors[0] := MQCA_Q_MGR_NAME;
MQINQ ( Self.HConn, Self.Hobj, 1, @Selectors, 0, nil, MQ_Q_MGR_NAME_LENGTH, Buffer, @Compcode, @Reason );

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Inquire Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Inquire Successed’);
end;
end;

procedure TForm1.Button8Click(Sender: TObject);
var
CompCode, Reason : MQLONG;
begin
Self.Memo1.Lines.Add(‘Begin Disconnect…’);

MQDISC ( @Self.HConn, @Compcode, @Reason );

if CompCode <> MQCC_OK then
begin
Self.Memo1.Lines.Add(‘Disconnect Failed’);
end
else
begin
Self.Memo1.Lines.Add(‘Disconnected successed’);
end;
end;

end.