首页 > 解决方案 > IMalloc_Free 和 IMalloc_release 的替代品

问题描述

为了释放SHGetFolderLocation()API 使用的内存,我使用IMallloc_Free()IMalloc_Release().

包含时编译得很好

#define COBJMACROS
#define CINTERFACE

但是,在某些文件中,特别是包含 ATL 头的文件,这会导致编译器问题。然而,那里pMalloc->Free()pMalloc-Release()工作。

是否有任何适用于这两个文件的免费和发布方法?

标签: c++cwinapiheader-filesatl

解决方案


通常不会,您要么使用 C 方式来处理 COM,要么使用 C++ 方式。

但是,特别是IMalloc在这里,只需使用它CoTaskMemFree。默认IMallocCoTaskMemFree兼容,COM 的分配与它们兼容。

SHGetFolderLocation被记录为被释放ILFree,但请参阅ILFree 文档中的备注。

另请参阅如何使用 IMalloc::Free?. 链接的帖子解释说,在旧系统中,shell 分配可能与 COM 分配不兼容,因此您不能使用IMalloc::Freeor CoTaskMemFreeILFree但现在可以(假设您不支持历史操作系统)。


推荐阅读