7

メソッドディレクトリに格納された一連のメソッドを使用してクラスを定義しました。クラスをインスタンス化し、matlab内でそのメソッドを呼び出すことができます。ただし、.NET / COMから同じことを実行しようとすると、次のエラーメッセージが表示されます。

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

ここでテストは方法です。

私のクラスはhandleから派生しており、クラスファイルで定義されたメソッドとディレクトリメソッドの両方の可能性を試しました。どちらも機能しません!

フィードバックをいただければ幸いです。どうもありがとう。

PS:

C#コード:

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

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

作業中のMATLABコード:

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

PPS:

C#コードから呼び出されたときに、機能しているMatlabスクリプトが機能していないことを再確認してください。

Matlabクラスの定義:

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

Matlabスクリプト:

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

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

1 に答える 1

5

クラス名と同じ「オブジェクトインスタンス名」を使用できないことがわかりました。そう:

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

動作します!Mathworks はこれをエラーとして報告しました (将来のリリースで修正される可能性があります)。

キリスト教徒

于 2012-09-03T11:21:57.940 に答える