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

cs0*_*815 7 c# matlab

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

"??? Reference to non-existent field 'test'.\n\n"
Run Code Online (Sandbox Code Playgroud)

这里测试是方法.

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

任何反馈都将非常感激.非常感谢.

PS:

C#代码:

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

matlab.Execute("clear;");
matlab.Execute("Object = Class1();");
string test = matlab.Execute("Object.test()");
Run Code Online (Sandbox Code Playgroud)

工作matlab代码:

clear;
Object = Class1();
Object.test()
Run Code Online (Sandbox Code Playgroud)

PPS:

在从C#代码调用时,只需仔细检查工作的Matlab脚本是否工作:

Matlab类定义:

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

Matlab脚本:

clear;
Test = Test();
result = Test.add(1, 3);
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

cs0*_*815 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);
Run Code Online (Sandbox Code Playgroud)

作品!Mathworks提出这个错误(他们可能会在将来的版本中解决这个问题).

基督教