Tibco EMS C API tibemsMsg_GetCorrelationID(), как освобождается память для идентификатора корреляции?

В API-интерфейсах TIBCO EMS C есть некоторые API, документация по использованию которых не очень ясна.

например, документация для приведенного ниже API говорит

tibems_status tibemsMsg_GetCorrelationID (сообщение tibemsMsg, значение const char**);

Параметры Описание

message: получить заголовок типа этого сообщения.
value : сохранить тип.

Что означает «Магазин» здесь? Выделяется ли новая память для значения? Как память освобождается для значения?

При вызове tibemsMsg_Destroy() сообщение уничтожается, но я все еще могу напечатать идентификатор корреляции.

Если сообщение уничтожено, то каким образом CorrelationID все еще доступен?


person Seeker    schedule 22.11.2019    source источник
comment
Иногда пример кода более полезен, чем документация по API. Вы ознакомились с примерами программ? Они могут уточнить, как этот API предназначен для использования. док. tibco.com/pub/emsi5os/8.4.0/doc/html/   -  person Brandon Tweed    schedule 23.11.2019
comment
tibemsMsg_Destroy() сообщение уничтожено, но я все еще могу напечатать correllationID - это ничего не значит.   -  person Jesper Juhl    schedule 23.11.2019


Ответы (1)


Для лучшей производительности этот вызов возвращает вам адрес идентификатора корреляции в этом сообщении.

Вы можете скопировать его, если вам это нужно, но не используйте его после уничтожения этого сообщения. Он все еще может быть виден после уничтожения, НО теперь он является частью освобожденной памяти и может быть перезаписан другими вещами в любое время.

Типичным вариантом использования может быть копирование содержимого в std::string.

std::string correlationID;
const char* id = NULL;
status = tibemsMsg_GetCorrelationID( jmsMsg, &id );
if( status==TIBEMS_OK && id!=NULL ) {
  correlationID = id; // COPY the null-terminated string pointed to by 'id'
}
// later: tibemsMsg_Destroy()
person Axel Podehl    schedule 07.01.2020