You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否从C#调用多类MATLAB项目并交互取值?附测试问题

问题解答

1. 空字符串返回的错误原因

你通过matlab.Execute("value = obj.getValueX();")获取返回值时,MATLAB默认不会将赋值语句的结果输出到命令窗口,因此Execute方法自然返回空字符串。要正确获取数值,需使用GetWorkspaceData方法读取MATLAB工作区中的变量,而非依赖Execute的返回内容。

修改后的C#代码示例:

private void button_start_Click(object sender, EventArgs e)
{
    try
    {
        matlab = new MLApp.MLApp();

        matlab.Execute(@"cd C:\Path"); // 确保路径指向MATLAB类文件所在目录
        matlab.Execute("obj = MyClass();");

        // 调用方法并将结果存入工作区变量
        matlab.Execute("currentValue = obj.getValueX();");
        // 从MATLAB工作区读取变量值
        object value;
        matlab.GetWorkspaceData("currentValue", "base", out value);
        Console.WriteLine("当前ValueX值:" + value.ToString());
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error : " + ex.Message);
    }
}

你也可以直接执行方法而不赋值,让MATLAB把结果输出到命令窗口,此时Execute就能返回对应值,但这种方式在处理复杂数据时不如读取工作区变量可靠:

var result = matlab.Execute("obj.getValueX()");
Console.WriteLine(result);

2. 多类MATLAB项目与C#交互的可行性

完全可行,只需满足以下条件:

  • 所有MATLAB类文件都放在MATLAB可访问的路径下(可通过matlab.Execute("addpath('你的多类项目根目录')")添加路径,或直接cd到项目目录);
  • 类的继承、依赖关系在MATLAB中本身可正常运行;
  • 调用逻辑与单个类一致:通过Execute创建对象,调用对象方法,再用GetWorkspaceData获取结果,或直接执行方法获取输出。

例如项目包含相互依赖的类A、B、C,只需将所有类文件放入同一目录(或添加路径到MATLAB),在C#中即可按如下方式调用:

matlab.Execute("objA = A();");
matlab.Execute("result = objA.callMethodThatUsesB();");
matlab.GetWorkspaceData("result", "base", out value);

需要注意:MATLAB Engine会维护持续的工作区,创建的对象会一直存在,直到关闭引擎或手动清除(如matlab.Execute("clear obj"););同时要确保MATLAB的定时器等后台操作不会因引擎连接问题阻塞,你的MyClass定时器逻辑可正常运行,只要MATLAB引擎实例保持活跃。


内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 03:16:24