Как скомпилировать класс с Matlab компилятора SDK?

Я хотел бы скомпилировать пакет Java из кода Matlab. у меня есть класс в Matlab:

classdef MyClass 
   properties
      Prop1
   end
   events
      Event1
   end
   methods
      function obj = MyClass()   // no arguments
         if nargin > 0
            obj.Prop1 = arg;
         end
      end
   end
end

Я пытался скомпилировать его, но это не работает. Не возможно скомпилировать классы. Поэтому я пытаюсь написать функции-оболочки. В моей функции Wrapper я вызываю свой сценарий classdef как и возвращаю объект. Я мог бы скомпилировать эту функцию, но в Java мне нужно передать аргументы. Но мой конструктор класса в Matlab не имеет аргументов.

в Java у меня есть Class1, и я создаю новые объекты из него. Этот объект теперь дает мне доступ к моему конструктору:

Class1 matlabClassTest = new Class1();
matlabClassTest.MyClass(???); // her it ask for arguments

1 ответ

Решение

Необходимо обернуть функции класса, потому что компилятор Matlab SDK может только компилировать функции.

Если это класс:

classdef MyClass 
   properties
      Prop1
   end

   methods  
     function obj= doSomething(obj,x)
      obj.Prop1=x;
      end
   end
end

создать новый м. файл для вашей функции конструктора Wrapper. Эта функция возвращает объект класса.

function obj=createMyClassObject()
obj=MyClass();
end

создать новый м. файл с вашей функцией-оболочкой Функция Wrapper возвращает объект, переданный в качестве аргумента.

function obj= doSomethingWrapper(obj,x)    
obj.doSomething(x)
end

Скомпилируйте обе функции с помощью Matlab Compiler SDK. Класс Myclass m File также должен находиться в том же каталоге. Matlab Compiler SDK автоматически распознает зависимость и показывает ее в опциях компилятора.

В Java вы можете теперь вызвать функцию createMyClassObject(), и вы получите объект Matlab. Передайте этот объект в функцию doSomethingWrapper().

Другие вопросы по тегам