【问题标题】:Alternatives to IMalloc_Free and IMalloc_releaseIMalloc_Free 和 IMalloc_release 的替代品
【发布时间】:2021-11-08 11:13:09
【问题描述】:

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

包含时编译得很好

#define COBJMACROS
#define CINTERFACE

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

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

【问题讨论】:

  • COBJMACROS 宏启用便利包装器,以便从 C 访问 COM 对象。如果这与其他代码冲突,您可以查看便利包装器并在右侧找到扩展版本。
  • 对 Shell 分配的所有内容使用 CoTaskMemFree。 docs.microsoft.com/en-us/windows/win32/api/combaseapi/…
  • SHGetFolderLocation(..., &pidl); ...; CoTaskMemFree(pidl); 完全忘记 IMalloc
  • @Sha3003 文档告诉你如何调用 CoTaskMemFree

标签: c++ c winapi header-files atl


【解决方案1】:

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

这里专门针对IMalloc,但是,只需使用CoTaskMemFree。默认的IMallocCoTaskMemFree 是兼容的,COM 的分配与它们兼容。

SHGetFolderLocation 被记录为使用ILFree 释放,但请参阅ILFree documentation 中的备注。

另见How to use IMalloc::Free?linked post 解释说,在旧系统中,shell 分配可能与 COM 分配不兼容,因此您不能将 IMalloc::FreeCoTaskMemFree 用于 ILFree,但现在可以(假设您不支持历史悠久的操作系统)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-15
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多