Gerenciamento de memória com o empacotador de interoperabilidade
O empacotador de interoperabilidade sempre tenta liberar a memória alocada pelo código não gerenciado. Esse comportamento está em conformidade com regras de gerenciamento de memória COM, mas difere as regras que governam o C++ nativo.
Confusão pode surgir se você prevê que o comportamento de C++ nativo (não liberar memória) quando usando platform invoke, que automaticamente libera a memória para ponteiros. Por exemplo, chamar o seguinte método não gerenciado a partir de uma DLL do C++ não automaticamente qualquer memória livre.
Assinatura não gerenciada
BSTR MethodOne (BSTR b) {
return b;
}
No entanto, se você definir o método como uma plataforma de invocar o protótipo, substitua cada BSTR digite com um String tipo e a chamada MethodOne, o common language runtime tenta liberar b duas vezes. Você pode alterar o comportamento de empacotamento usando IntPtr tipos em vez de seqüência de caracteres tipos.
O runtime sempre usa o CoTaskMemFree método para liberar memória. Se a memória que você estiver trabalhando com não foi alocada com o CoTaskMemAlloc método, você deve usar um IntPtr e liberar a memória manualmente usando o método apropriado. Da mesma forma, você pode evitar automático de memória liberando em situações onde memória nunca deve ser liberada, tal como ao usar o GetCommandLine a função de Kernel32. dll, que retorna um ponteiro para a memória do kernel. Para obter detalhes sobre a liberação de memória manualmente, consulte o Buffers de amostra.
Consulte também
Conceitos
Blittable e tipos de não-Blittable