Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Às vezes, um método aloca um buffer de memória no heap e retorna o endereço do buffer para o chamador. O COM define um par de funções para alocar e liberar memória no heap.
- A funçãoCoTaskMemAllocaloca um bloco de memória.
- A funçãoCoTaskMemFreelibera um bloco de memória que foi alocado com CoTaskMemAlloc.
Vimos um exemplo desse padrão no exemplo da caixa de diálogo abrir :
PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
// ...
CoTaskMemFree(pszFilePath);
}
O método GetDisplayName aloca memória para uma cadeia de caracteres. Internamente, o método chama CoTaskMemAlloc para alocar a cadeia de caracteres. Quando o método é retornado, pszFilePath aponta para o local da memória do novo buffer. O chamador é responsável por chamar CoTaskMemFree para liberar a memória.
Por que o COM define suas próprias funções de alocação de memória? Um motivo é fornecer uma camada de abstração sobre o alocador de heap. Caso contrário, alguns métodos podem chamar de malloc, enquanto outros chamaram novo. Em seguida, seu programa precisaria chamar gratuito em alguns casos e excluir em outros, e manter o controle de tudo isso rapidamente se tornaria impossível. As funções de alocação COM criam uma abordagem uniforme.
Outra consideração é o fato de que COM é um padrão binário, portanto, não está vinculado a uma linguagem de programação específica. Portanto, o COM não pode depender de nenhuma forma específica de linguagem de alocação de memória.
Próximo