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

У меня есть базовый класс 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. Мне было интересно, это вообще возможно? И если да, то как это можно сделать? Если нет, есть ли способ обойти это? (У меня есть компонент GUI, написанный на C #, который я не хочу интегрировать в Matlab, а наоборот).

1 Ответ

2 голосов
/ 13 января 2012

невозможно использовать классы Matlab внутри сборок .NET.Существует множество обходных путей:

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

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

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

function DisplayMyClass()
    global myClass;
    myClass.display();
end
...