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:
Voici un extrait de code pour (1):
function CreateMyClass(st) global myClass; myClass = MyClass(st); end function DisplayMyClass() global myClass; myClass.display(); end