Micky Duncan
7/30/2007 2:50: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
"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...
>