将 C# object[] 传递给 Matlab Dll 方法

Pass C# object[] to Matlab Dll method

我正在尝试使用参数数组 params 关键字将 C# 对象数组传递给 Matlab 方法。我的 Matlab 方法符合 .net 程序集 Dll。这是我的简单 C# 方法:

public void Method1(params object[] objArg)
{           
    _mMExt.mMethod1((MWArray[])objArg);
}

我正在使用 varargin 作为我的 Matlab 函数 mMethod1:

的输入
function mMethod1(varargin)
    nVarargs = length(varargin);
end

问题是当我通过这样做将 object[] 转换为 MWArray[] 时:

(MWArray[])objArg

我似乎可以使用 (MWArray)object1 将 C# 对象转换为 MWArray,但它不允许我将对象数组转换为 MWArray 数组。

这可能吗?如果可以,怎么做?

提前致谢。

这是我测试过的小例子。

假设您使用 MATLAB Compiler SDK:

将以下 MATLAB 函数编译到 .NET 程序集中

myFunction.m

function myFunction(varargin)
    for i=1:nargin
        disp(varargin{i});
    end
end

现在,在您的 C# 程序中,您可以通过向函数传递可变数量的输入参数来简单地调用函数 myLib.myClass.myFunction,如下所示:

Program.cs

using System;
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
using myLib;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("calling myFunction(varargin)...");
        CallMyFunction(1, 2.0f, 3.14, "str4");
    }

    static void CallMyFunction(params MWArray[] varargin)  // or object[]
    {
        myClass obj = new myClass();
        obj.myFunction(varargin);
    }
}

这相当于显式写成:

MWArray[] varargin = new MWArray[4];
varargin[0] = new MWNumericArray(1);
varargin[1] = new MWNumericArray(2.0f);
varargin[2] = new MWNumericArray(3.14);
varargin[3] = new MWCharArray("str4");

myClass obj = new myClass();
obj.myFunction(varargin);