3MFConsortium / lib3mf

lib3mf is an implementation of the 3D Manufacturing Format file standard
http://3mf.io
BSD 2-Clause "Simplified" License
236 stars 94 forks source link

Memory corruption with C# [Csharp] bindings #284

Open GeneThomas opened 3 years ago

GeneThomas commented 3 years ago

i. version of lib3mf: 2.2.0 ii. operating system: Windows 10 iii. what did you do: Compiled and ran the attached project:

class ThreeMfTest
{
    public static void Main()
    {
        CModel model = Wrapper.CreateModel();

        CColorGroup colorGroupTest = model.AddColorGroup();
        sColor redTest = Wrapper.RGBAToColor(255, 0, 0, 255);
        uint idRedTest = colorGroupTest.AddColor(redTest);
        // throws System.AccessViolationException:
        //   HResult = 0x80004003
        //   Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
    }
}

iv. expected: I expected the code to not throw an exception v. It throws an exception indicating that memory has probably been corrupted.

I shall attach a full solution .sln etc.. so the fault can be reproduced.

GeneThomas commented 3 years ago

3MfTest.zip

Attached is zip file containing C# solution to exercise the fault.

When I am finish I shall have some C# examples translated from C++ that you can add to your package.

GeneThomas commented 3 years ago

lib3MF v2.1.1 and v2.0.0 have the same fault, has the CSharp bindings ever worked?

rahimshahid commented 1 year ago

Having the exact same problem with version 2.2.0 (and older versions as well e.g. 2.1.1, 2.0.1 & 2.1.0).

Problem does not only occur with adding colors, it also occurs once you add a material e.g.

CModel rootModel= Wrapper.CreateModel();
var baseMatGroup = rootModel.AddBaseMaterialGroup();
var darkBlue = Lib3MF.Wrapper.RGBAToColor(20, 20, 90, 255);
baseMatGroup.AddMaterial("material1", darkBlue); // ---> throws the same exception 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt.'

Any idea how to solve this or any Work Around to get the colors working on C# ?