int rc = CCI_SUCCESS; CCI_BROKER_INFO_ST brokerInfo = {CCI_BROKER_INFO_ST_DEFAULT}; #definir INTITIAL_STR_LEN 256 CciChar brokerNameStr[INTITIAL_STR_LEN]; CciChar executionGroupNameStr[INTITIAL_STR_LEN]; CciChar queueManagerNameStr[INTITIAL_STR_LEN]; brokerInfo.brokerName.bufferLength = INTITIAL_STR_LEN; brokerInfo.brokerName.buffer = brokerNameStr; brokerInfo.executionGroupName.bufferLength = INTITIAL_STR_LEN; brokerInfo.executionGroupName.buffer = executionGroupNameStr; brokerInfo.queueManagerName.bufferLength = INTITIAL_STR_LEN; brokerInfo.queueManagerName.buffer = queueManagerNameStr; cciGetBrokerInfo(&rc,&brokerInfo); /* apenas no caso de algum dos buffers ser muito pequeno*/ if ((brokerInfo.brokerName.bytesOutput < brokerInfo.brokerName.dataLength) || (brokerInfo.executionGroupName.bytesOutput < brokerInfo.executionGroupName.dataLength) || (brokerInfo.queueManagerName.bytesOutput < brokerInfo.queueManagerName.dataLength)) { /*pelo menos um dos buffers eram muito pequenos, tente novamente*/ /* NOTA: É improvável que os tamanhos iniciais eram razoavelmente grandes*/ brokerInfo.brokerName.bufferLength = brokerInfo.brokerName.dataLength; brokerInfo.brokerName.buffer = (CciChar*)malloc (brokerInfo.brokerName.bufferLength * sizeof(CciChar)); brokerInfo.executionGroupName.bufferLength = brokerInfo.executionGroupName.dataLength; brokerInfo.executionGroupName.buffer = (CciChar*)malloc (brokerInfo.executionGroupName.bufferLength * sizeof(CciChar)); brokerInfo.queueManagerName.bufferLength = brokerInfo.queueManagerName.dataLength; brokerInfo.queueManagerName.buffer = (CciChar*)malloc (brokerInfo.queueManagerName.bufferLength * sizeof(CciChar)); cciGetBrokerInfo(&rc,&brokerInfo); /*agora faça algo que tenha sentido com essas cadeias antes de os buffers ficarem fora do escopo*/ /* por exemplo, chame uma função gravada do usuário para copiá-las para outro local*/ copyBrokerInfo(brokerInfo.brokerName.buffer, brokerInfo.executionGroupName.buffer, brokerInfo.queueManagerName.buffer); free((void*)brokerInfo.brokerName.buffer); free((void*)brokerInfo.executionGroupName.buffer); free((void*)brokerInfo.queueManagerName.buffer); }else{ /*agora faça algo que tenha sentido com essas cadeias antes de os buffers ficarem fora do escopo*/ /* por exemplo, chame uma função gravada do usuário para copiá-las para outro local*/ copyBrokerInfo(brokerInfo.brokerName.buffer, brokerInfo.executionGroupName.buffer, brokerInfo.queueManagerName.buffer); }