什么时候适合使用CoTaskMemAlloc?有人可以举个例子吗?
天哪,我不得不想一会儿这个 – 我已经用ATL做了大量的小规模COM编程,很少有使用它.
原文链接:https://www.f2er.com/windows/371090.html有一种情况,请注意:Windows Shell extensions.如果您正在处理一组文件系统对象,则可能需要处理PIDLs(指向ID列表的指针).这些是奇怪的小文件系统对象抽象,它们需要使用COM感知分配器(如CoTaskMemAlloc)显式分配/释放.还有一个替代方案,从SHGetMalloc(不推荐使用)或CoGetMalloc获取的IMalloc
接口指针 – 它只是一个使用的抽象层,因此您的代码不会绑定到特定的内存分配器,并且可以使用任何适当的内存分配器.
使用CoTaskMemAlloc或IMalloc而不是malloc()的观点是,内存分配/释放需要是“COM感知”,以便在运行时执行其分配和释放,即使分配和释放通过完全不相关的代码完成(例如Windows分配内存,将其传输到C代码,稍后释放,或者您的C代码分配,将其传输给其他人稍后释放的VB代码). malloc()和new都不能与系统的运行时堆互操作,因此您无法使用它们来分配内存以传输到其他COM对象,或从其他COM对象接收内存并释放.