Question

I have a basic Matlab class which I want to instantiate in C#.

classdef MyClass
    properties
        Value
    end

    methods
        function obj=MyClass(v)
            obj.Value = v;
        end

        function display(obj)
            disp(obj.Value);
        end
    end    
end

This is then built into a .DLL file and imported in a C# project along with the associated Matlab namespaces (MathWorks.MATLAB.NET.Arrays, MathWorks.MATLAB.NET.Utility).

On the C# side, I am trying to build an instantiation of this class thus:

        Untitled2.MLTestClass matlab = new Untitled2.MLTestClass();
        MWCharArray input = new MWCharArray("Initial");                       
        MWArray[] result = matlab.MyClass(1, input);

By the end of the last line of code, result.Length = 1 and result[0] = null. I was somehow expecting to obtain the reference to the newly created Matlab object somehow. I was wondering, is this even possible? And if yes, then how can this be accomplished? If no, is there a way around it? (I basically have a GUI component written in C# which I don't want to integrate in Matlab, but rather, the other way round).

Was it helpful?

Solution

It is not possible to use Matlab classes inside .NET assemblies. There are numerous workarounds:

  1. Define your variable as global , and access it with several functions that wrap its methods
  2. Return your Matlab class as a value of field in struct.

Here is a code snippet for (1):

function CreateMyClass(st)
    global myClass;
    myClass = MyClass(st);
end

function DisplayMyClass()
    global myClass;
    myClass.display();
end
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top