2017-07-03 730 views
0

我有一切工作OK就沒有了,直到今天我上了MQOPEN錯誤
2085 MQRC_UNKNOWN_OBJECT_NAMEMQOPEN給出錯誤2085,這是我以前

#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;/* MQCONNX options */  
MQCNO Connect_options = {MQCNO_DEFAULT};  
/* Client connection channel */  
MQCD ClientConn = {MQCD_CLIENT_CONN_DEFAULT};  



#define MAX_NUM_OPEN_QUEUES  10  



int dteMqOpen(const char *name, int *qd)  
{  
    MQLONG options;  
    MQHOBJ hObj;  
    int  i;  
    printf("SAM\n");  
    strncpy(od.ObjectName, name, MQ_Q_NAME_LENGTH);  
    printf("SAM2\n");  
    O_options = MQOO_INPUT_AS_Q_DEF + MQOO_FAIL_IF_QUIESCING;  
    printf("SAM3\n");  
    MQOPEN(sHConn, &od, O_options, &hObj, &sCompCode, &sReason);  
    printf("MQopen = %d and %d\n",sCompCode,sReason);  
    if (sCompCode != MQCC_OK)  
    {  
     printf("RETURN %d\n",DTE_MQR_FAILED);  
     return DTE_MQR_FAILED;  
    }  
    ++sNumOpenQueues;  
    *qd = 1;  
    for(i = 0; i < MAX_NUM_OPEN_QUEUES; i++)  
    {  
     printf("In the loop1\n");  
     if(sQueues[i].handle == -1)  
     {  
      *qd = i;  
      printf("QDESC1 = %d\n",qd);  
      sQueues[i].handle = hObj;  
      sQueues[i].IsSyncpointControled = 0;  
      break;  
    }  
    printf("In the loop\n");  
    }  
    printf("QDESC = %d\n",qd);  
    return DTE_MQR_OK;  
}  

函數調用:

qd = -1;  
dteretopen = dteMqOpen(QName, &qd);  
printf ("Return code from dteMqOpen = %d\n",dteretopen);  
if (dteretopen ==0)  
{  
    printf("MQOPEN could not open MQ, check errpr log\n");  
    exit(99);  
}  

錯誤2085.但前幾天沒有這樣的錯誤
連接正常,但MQOPEN失敗

+0

**從來沒有**'typedef'指針。 – Olaf

+0

但過去15年來一直在努力 – SamOl

+0

所以你在過去的15年裏寫了糟糕的代碼。你如何確保限定符正確性?而不是'*'鍵入'P'。沒有保存,但有很多問題。 – Olaf

回答

1
dteretopen = dteMqOpen(QName, &qd); 

顯然 '的QName' 具有無效值。

您已經發布有關同一個程序的問題。很明顯,您在MQ編程中沒有任何培訓。您需要儘快獲得一些MQ培訓。網絡和視頻上也有很多很多信息。

爲什麼你不做一些基本的調試和輸出'QName?

你需要採取一些主動,在這裏張貼問題之前,調試程序。我們不在這裏做你的工作。

+0

顯然,你在說話,不知道什麼。 QName有效。我已經重新再次運行該程序,必須回到我剛纔的問題,因爲MQOPEN工作,但MQPUT給分段錯誤 – SamOl

+0

BS。我與MQ合作了20多年,我完全知道我在說什麼。 2085年的RC表示您提供了INVALID隊列名稱。爲什麼不在MQ知識中心查找RC 2085? https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.0.0/com.ibm.mq.tro.doc/q041480_.htm更重要的是,你爲什麼不去MQ技術會議(HTTP:/ /www.mqtechconference.com)並在MQ中獲得一些培訓。 Morag Hughson正在做幾個MQ編程會話。 – Roger

+0

你是對的,這是我們的MQ員工問題。謝謝 – SamOl