从.Net调用Matlab对象的(目录)方法

7

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

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

这里test是一个方法。

我的类继承自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()

附注:

刚刚仔细检查了一下,发现从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);
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发现了一个错误(他们可能会在未来的版本中修复此问题)。

Christian


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接