Comment utiliser des objects Matlab dans des assemblys .NET compilés?

J’ai une classe de base Matlab que je veux instancier en C #.

classdef MyClass properties Value end methods function obj=MyClass(v) obj.Value = v; end function display(obj) disp(obj.Value); end end end 

Cela est ensuite intégré dans un fichier .DLL et importé dans un projet C # avec les espaces de noms Matlab associés (MathWorks.MATLAB.NET.Arrays, MathWorks.MATLAB.NET.Utility).

Du côté C #, j’essaie de construire une instanciation de cette classe ainsi:

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

À la fin de la dernière ligne de code, result.Length = 1 et result [0] = null. Je m’attendais en quelque sorte à obtenir la référence au nouvel object Matlab. Je me demandais, est-ce même possible? Et si oui, alors comment cela peut-il être accompli? Si non, y a-t-il un moyen de le contourner? (J’ai essentiellement un composant d’interface graphique écrit en C # que je ne souhaite pas intégrer dans Matlab, mais plutôt l’inverse).

Il n’est pas possible d’utiliser des classes Matlab dans des assemblys .NET. Il existe de nombreuses solutions de contournement:

  1. Définissez votre variable comme globale et accédez-y avec plusieurs fonctions qui encapsulent ses méthodes
  2. Renvoie votre classe Matlab en tant que valeur de champ dans struct.

Voici un extrait de code pour (1):

 function CreateMyClass(st) global myClass; myClass = MyClass(st); end function DisplayMyClass() global myClass; myClass.display(); end