Как я могу использовать объекты Matlab в скомпилированных сборках .NET?
-
27-10-2019 - |
Вопрос
У меня есть базовый класс 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. Есть многочисленные обходные пути:
- Определите свою переменную как Глобальный и получить доступ к нему несколькими функциями, которые обертывают его методы
- Верните свой класс Matlab как значение поля в структуре.
Вот фрагмент кода для (1):
function CreateMyClass(st)
global myClass;
myClass = MyClass(st);
end
function DisplayMyClass()
global myClass;
myClass.display();
end