2012-08-31 18 views
7

Definí una clase con un conjunto de métodos almacenados en un directorio de métodos. Puedo instanciar la clase e invocar sus métodos dentro de matlab. Sin embargo, si trato de hacer lo mismo desde .NET/COM consigo este mensaje de error:invocar el método (directorio) del objeto Matlab desde .Net

"??? Reference to non-existent field 'test'.\n\n" 

Aquí prueba es el método.

Mi clase se deriva de handle y he intentado ambas posibilidades: método definido en el archivo de clase y método de directorio. ¡Ni funciona!

Cualquier comentario sería muy apreciado. Muchas gracias.

PS:

código C#:

MLApp.MLApp matlab = new MLApp.MLApp(); 

matlab.Execute("clear;"); 
matlab.Execute("Object = Class1();"); 
string test = matlab.Execute("Object.test()"); 

Trabajando código de MATLAB:

clear; 
Object = Class1(); 
Object.test() 

PPS:

Basta con hacer doble comprobado que la secuencia de comandos Matlab de trabajo no está funcionando cuando se invoca del código de C#:

Matlab definición de clase:

classdef Test < handle 
    methods   
     function [c, obj] = add(obj, a, b) 
      c = a + b; 
     end 
    end % methods 
end %classdef 

Matlab guión:

clear; 
Test = Test(); 
result = Test.add(1, 3); 

código C#:

MLApp.MLApp matlab = new MLApp.MLApp(); 

object result; 

matlab.Execute("clear;"); 
matlab.Execute("Test = Test();"); 
matlab.Execute("result = Test.add(1, 3);"); 
matlab.GetWorkspaceData("result", "base", out result); 

Respuesta

5

Resulta que no se puede utilizar el mismo nombre instancia de objeto "como la clase nombre. Entonces:

MLApp.MLApp matlab = new MLApp.MLApp(); 

object result; 

matlab.Execute("clear;"); 
matlab.Execute("X = Test();"); 
matlab.Execute("result = X.add(1, 3);"); 
matlab.GetWorkspaceData("result", "base", out result); 

funciona! Mathworks planteó esto como un error (pueden solucionar esto en versiones futuras).

Christian

Cuestiones relacionadas