Как я могу использовать объекты Matlab в скомпилированных сборках .NET?

StackOverflow https://stackoverflow.com/questions/8841146

Вопрос

У меня есть базовый класс MATLAB, который я хочу создать экземпляр в C#.

classdef MyClass
    properties
        Value
    end

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

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

Затем он встроен в файл .dll и импортируется в проекте C# вместе с соответствующими пространствами имен Matlab (mathworks.matlab.net.arrays, mathworks.matlab.net.utility).

На стороне C# я пытаюсь создать экземпляр этого класса таким образом:

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

К концу последней строки кода, result.length = 1 и result [0] = null. Я каким -то образом ожидал получить ссылку на недавно созданный объект Matlab. Мне было интересно, это вообще возможно? И если да, то как это можно сделать? Если нет, есть ли это способ обойти это? (У меня в основном есть компонент графического интерфейса, написанный в C#, который я не хочу интегрировать в Matlab, а скорее наоборот).

Это было полезно?

Решение

это невозможно использовать классы MATLAB внутри .NET Assemblies. Есть многочисленные обходные пути:

  1. Определите свою переменную как Глобальный и получить доступ к нему несколькими функциями, которые обертывают его методы
  2. Верните свой класс Matlab как значение поля в структуре.

Вот фрагмент кода для (1):

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

function DisplayMyClass()
    global myClass;
    myClass.display();
end
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top