[Mono-devel-list] Problem with parameter definition of GdipImageCodecInfo::MarshalTo
Stefan Domnanovits
domo at domnanovits.at
Thu May 27 18:08:39 EDT 2004
When calling a few lines of code like
void foo()
{
Bitmap bmp = new Bitmap (42, 42);
Graphics g = Graphics.FromImage(bmp);
g.Clear (Color.Blue);
bmp.Save ("myimage.jpg", ImageFormat.Jpeg); // exception thrown here
}
an NullReferenceException was thrown. (current CVS Version on Mac OS X).
I did a little testing and discovered that the error occurred in the
System.Drawing.dll in the call to the static MarshalTo() method of
the GdipImageCodecInfo struct. I changed the definition of the method from
internal static void MarshalTo (GdipImageCodecInfo gdipcodec,
ImageCodecInfo codec)
to
internal static void MarshalTo (ref GdipImageCodecInfo gdipcodec,
ImageCodecInfo codec)
providing the first parameter as "ref", which fixed the error.
The methods maps parameters of the unmanaged gdiplus structure to a
managed class.
I'm a little confused now, as imho this should not have made any
difference. A structure is a value type after all, which means the
runtime should have created a complete copy of the structure for the
GdipImageCodecInfo.MarshalTo() method. Is there something different with
structures, allocated by a Marshal.PtrToStructure() call?
kind regards
Stefan Domnanovits
my current system:
Mac OS X 10.3.4
latest CVS Version of Mono 2004-05-27
latest CVS Version of libgdiplus 2004-05-27
More information about the Mono-devel-list
mailing list