7

我定义了一个类,其中包含存储在方法目录中的一堆方法。我可以实例化该类并在 matlab 中调用它的方法。但是,如果我尝试从 .NET/COM 执行相同操作,我会收到以下错误消息:

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

这里的测试是方法。

我的类是从句柄派生的,我尝试了两种可能性:类文件中定义的方法和目录方法。都不行!

任何反馈将不胜感激。非常感谢。

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

PP:

只需仔细检查从 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 回答