Considere problemas relacionados ao gerenciamento de armazenamento ao desenvolver extensões definidas pelo usuário na linguagem de programação C.
Se você estiver desenvolvendo extensões definidas pelo usuário utilizando a linguagem de programação Java™, você pode utilizar métodos padrão Java de manipulação de cadeias.
Toda a memória alocada por uma extensão definida pelo usuário deve ser liberada pela extensão definida pelo usuário. A construção de um nó em tempo de execução faz com que a função cniCreateNodeContext seja chamada, o que permite à extensão definida pelo usuário alocar áreas de dados específicas à instância do nó para armazenar um contexto. O endereço do contexto é retornado ao intermediário e é transmitido de volta do intermediário quando um método interno fizer com que uma função da extensão definida pelo usuário seja chamada; assim, a extensão C definida pelo usuário pode localizar e utilizar o contexto correto para o processamento da função.
O intermediário transmite endereços de objetos C++ à extensão definida pelo usuário que são utilizados como identificadores a serem transmitidos de volta em chamadas de função subseqüentes. Sua extensão C definida pelo usuário não de manipular nem utilizar esses ponteiros de nenhuma forma, por exemplo, tentando liberar armazenamento utilizando a função free. Essas ações causam comportamento imprevisível no intermediário.
A função de implementação cniCreateNodeContext é chamada sempre que o objeto de nó subjacente tiver sido construído internamente. É chamada quando um intermediário é definido com um fluxo de mensagens que utiliza um nó definido pelo usuário. Essa atividade não é necessariamente a mesma que criar (ou reutilizar) um encadeamento para executar uma instância de fluxo de mensagens que contém o nó. A função cniCreateNodeContext é chamada somente uma vez, durante a configuração do fluxo de mensagens, independentemente de quantos encadeamentos estão executando o fluxo de mensagens.
Considerações similares se aplicam a analisadores definidos pelo usuário e à função de implementação correspondente cpiCreateContext.