C MQPUT错误中止

C MQPUT错误中止,c,ibm-mq,C,Ibm Mq,还是MQPUT的一个问题 下面是我的功能 #include <stdio.h> #include <cmqc.h> #include <cmqxc.h> #include "dte_mq.h" #include <string.h> #include <stdlib.h> typedef struct tagDTE_QUEUE_DESCRIPTOR { MQHOBJ

还是MQPUT的一个问题

下面是我的功能

#include <stdio.h>   
#include <cmqc.h>   
#include <cmqxc.h>    
#include "dte_mq.h"    
#include <string.h>    
#include <stdlib.h>    

typedef struct tagDTE_QUEUE_DESCRIPTOR    
{    
     MQHOBJ handle;    
     int    IsSyncpointControled;    
} DTE_QUEUE_DESCRIPTOR, *PDTE_QUEUE_DESCRIPTOR;    

static MQHCONN sHConn = 0;    
static MQLONG  sCompCode = MQCC_OK;    
static MQLONG  sReason = MQRC_NONE;    
static int     sNumOpenQueues = 0;    
static PDTE_QUEUE_DESCRIPTOR sQueues = NULL;    
MQLONG   OpenCode;    
MQOD     od = {MQOD_DEFAULT};    /* Object Descriptor */    
MQMD     md = {MQMD_DEFAULT};    
MQPMO    pmo = {MQPMO_DEFAULT};    
MQLONG   O_options;    
MQGMO   gmo = {MQGMO_DEFAULT};    
/* MQCONNX options */    
MQCNO   Connect_options = {MQCNO_DEFAULT};    
/* Client connection channel */     
MQCD    ClientConn = {MQCD_CLIENT_CONN_DEFAULT};    



#define MAX_NUM_OPEN_QUEUES     10    


DTE_MQ_RESULT dteMqSend(int qd, void *buf, int len)    
{    
    printf("oleg\n");    
   /* memcpy(md.Format, MQFMT_STRING, MQ_FORMAT_LENGTH); */    
   md.MsgType  = MQMT_DATAGRAM;    
   printf("oleg1\n");    
   memcpy(md.MsgId, MQMI_NONE, sizeof(md.MsgId));    
   printf("oleg2\n");    
   memcpy(md.CorrelId, MQCI_NONE, sizeof(md.CorrelId));    
   printf("oleg3\n");    
   memcpy(md.Format, MQFMT_STRING, (size_t)MQ_FORMAT_LENGTH);    
   printf("oleg4\n");    
   printf("QD is = %d\n",qd);    
  if(sQueues[qd].IsSyncpointControled)    
      pmo.Options |= MQPMO_SYNCPOINT;    
   printf("oleg5\n");    


   MQPUT(sHConn, sQueues[qd].handle, &md, &pmo, len, buf, &sCompCode, &sReason);    

   printf("MQput CC=%ld RC=%ld\n", sCompCode, sReason);    
   if (sCompCode != MQCC_OK) return DTE_MQR_FAILED;    
   return DTE_MQR_OK;    
}    
正如您所看到的,qd=0,在MQPUT in if语句之前的这个地方,它并没有出现。我可能需要做其他声明并分配选项吗

if(sQueues[qd].IsSyncpointControled)    
{    
    pmo.Options |= MQPMO_SYNCPOINT;    
    printf("Synchronized\n");    
}    
这恰好发生在MQPUT调用上

你能帮帮我吗

sques[qd]的值是多少。处理
?我不知道如何检查。qd是0在调试器中运行代码。或者打印出值。编程是学习如何调试您编写的代码(或其他人的代码)的三分之二。您发布的内容实际上都与MQ无关。这是直接的C代码和问题。您的缓冲区在MQPUT调用中被错误引用。如何正确引用它?
Using values:    
QMgrName   : QM.SU00005    
QName      : AP.TR.FROM.ADS    
ChannelName: AVNCHCTM.CLIENT    
hostname   : enbmqu02.uk.db.com    
port       : 1415    
CC = 0, RS = 0    
Return code from dteMqInit = 1    
SAM    
SAM2    
SAM3    
MQopen = 0 and 0    
In the loop1    
QDESC1 = -990964260    
QDESC = -990964260    
Return code from dteMqOpen = 1    
oleg    
oleg1    
oleg2    
oleg3    
oleg4    
QD is = 0    
oleg5    
Aborted   
if(sQueues[qd].IsSyncpointControled)    
{    
    pmo.Options |= MQPMO_SYNCPOINT;    
    printf("Synchronized\n");    
}