2012-08-31 11 views
7

Zdefiniowałem klasę z grupą metod przechowywanych w katalogu metod. Mogę utworzyć instancję klasy i wywołać jej metody w programie Matlab. Jednakże, jeśli staram się robić to samo z .NET/COM otrzymuję ten komunikaty o błędach:Wywołać metodę obiektu (katalogu) Matlab z .Net

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

Tutaj Test jest metoda.

Moja klasa wywodzi się z obsługi i wypróbowałem obie możliwości: metodę zdefiniowaną w pliku klasy i metodzie katalogu. Ani działa!

Wszelkie opinie będą bardzo mile widziane. Wielkie dzięki.

PS:

kod C#:

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

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

Praca kod Matlab:

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

PPS:

Wystarczy dwukrotnie sprawdzane że działa skrypt Matlab nie działa przy wywołaniu z kodu C#:

Matlab definicja klasy:

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

Matlab scenariusz:

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

C# Kod:

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); 

Odpowiedz

5

Okazuje się, że nie można używać tego samego 'Przedmiot nazwę instancji' jako klasy Nazwa. A więc:

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); 

działa! Mathworks podniósł ten błąd (mogą to naprawić w przyszłych wydaniach).

Christian

Powiązane problemy