Groups | Blog | Home
all groups > dotnet interop > july 2007 >

dotnet interop : How to free the memory allocated in unmanged code from managed code?



7/17/2007 5:49:42 AM
Hi,

I am using a COM component which provides a function like
GetBitmapData(out BYTE* pData, out long *pLen), in which it allocates
the memory using "new" and returns the pointer and length of memory
block.

i am calling this functon in C# in following way...
int pImageBuffer = 0;
int len = 0;

m_COMAdapter.GetBitmapData(ref pImageBuffer, out len);
IntPtr ImageData = new IntPtr(pImageBuffer);
//I use IntPtr
//Now I need to free up the memory allocated by GetBitmapData()

I am not sure how i can free up the memory here?

I tried Marshal.FreeCoTaskMem(ImageData), but its not helping and i am
sure if it is the correct way...

thx,
m...
Micky Duncan
7/30/2007 12:00:00 AM
Hi,
If your COM object allocates the data then it should be the one that frees
it too. Add a method called FreeBitmapData() or something on the COM object.

This is actually a good practice from the days of c++ DLLs where memory is
allocated and shared amonst the DLL's clients. Clients don't free the data
but rather the one who allocated it in the first place - the DLL

Cheers,
Micky

[quoted text, click to view]
AddThis Social Bookmark Button