tags:

views:

26

answers:

2

I'm using ICommandText::GetCommandText method. According to the MSDN documentation (http://msdn.microsoft.com/en-us/library/ms709825(v=VS.85).aspx) I need to use IMalloc::Free to release the memory allocated for LPOLESTR *ppwszCommand output parameter.

How do I use this interface to do that?

+1  A: 

You'll need to retrieve an IMalloc* pointer first - use CoGetMalloc() for that. Once you've got an IMalloc* pointer call IMalloc::Free(), passing the address of the block you want to free. Once you've finished with the IMalloc* pointer call IMalloc::Release() on the pointer or save it somewhere to reuse and free when you no longer need it.

sharptooth
+3  A: 

Just pass it to CoTaskMemFree, it's wrapping the same default OLE allocator CoGetMalloc is exposing.

CoTaskMemAlloc/Free are convenient shortcuts to IMalloc interface of the default OLE allocator so you can skip the cumbersome interface altogether.

wqw
Cool, but is there any reference confirming that really CoTaskMemFree() is the same as IMalloc::Free()?
sharptooth
Raymond Chen has an explanation and more on the internals: http://blogs.msdn.com/b/oldnewthing/archive/2004/07/05/173226.aspx
wqw
Cool, thanks for the link.
sharptooth