[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

microsoft.public.dotnet.framework.interop

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

m...

7/17/2007 12:50:00 PM

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...

1 Answer

Micky Duncan

7/30/2007 2:50:00 AM

0

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

"m..." <plane.newpost@gmail.com> wrote in message
news:1184676582.852590.122670@x35g2000prf.googlegroups.com...
> 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...
>