Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Parfois, une méthode alloue une mémoire tampon sur le tas et retourne l’adresse de la mémoire tampon à l’appelant. COM définit une paire de fonctions pour allouer et libérer de la mémoire sur le tas.
- La fonction CoTaskMemAlloc alloue un bloc de mémoire.
- La fonction CoTaskMemFree libère un bloc de mémoire alloué avec CoTaskMemAlloc.
Nous avons vu un exemple de ce modèle dans l’exemple de boîte de dialogue Ouvrir :
PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
// ...
CoTaskMemFree(pszFilePath);
}
La méthode GetDisplayName alloue de la mémoire pour une chaîne. En interne, la méthode appelle CoTaskMemAlloc pour allouer la chaîne. Lorsque la méthode est retournée, pszFilePath pointe vers l’emplacement de mémoire du nouveau tampon. L’appelant est chargé d’appeler CoTaskMemFree pour libérer la mémoire.
Pourquoi COM définit-il ses propres fonctions d’allocation de mémoire ? Une des raisons est de fournir une couche d’abstraction sur l’allocateur de tas. Sinon, certaines méthodes peuvent appeler malloc tandis que d’autres ont appelé nouvelle. Ensuite, votre programme devra appeler gratuite dans certains cas et supprimer dans d’autres, et garder le suivi de tout cela serait rapidement impossible. Les fonctions d’allocation COM créent une approche uniforme.
Une autre considération est le fait que COM est un binaire standard, de sorte qu’il n’est pas lié à un langage de programmation particulier. Par conséquent, COM ne peut pas s’appuyer sur une forme spécifique au langage d’allocation de mémoire.
Prochain