COM 接口不支持结构或稀疏数组。我的意思是你不能直接在 MATLAB 和 .NET 之间传递它们,如果你尝试在 MATLAB 命令窗口中打印以下错误:
  警告:ActiveX - 无效的参数类型或值
一种解决方法是在 MATLAB 端访问结构的字段,并将每个字段存储在一个变量中,该变量可以使用支持的转换规则之一封送回 C#。
这是一个例子:
static void Main(string[] args)
{
    // load MAT-file contents into a structure variable
    matlab.Execute("S = load('wind.mat')");
    // get field and store in separate variable
    matlab.Execute("x = S.x;");
    // obtain variable "x" from MATLAB into C#
    var x = (double[,,]) matlab.GetVariable("x", "base");
    // print array in C#
    Console.WriteLine("ndims(x) = {0}, numel(x) = {1}", x.Rank, x.Length);
    for (int i = 0; i < x.GetLength(0); i++)
    {
        for (int j = 0; j < x.GetLength(1); j++)
        {
            for (int k = 0; k < x.GetLength(2); k++)
            {
                Console.WriteLine("x[{0},{1},{2}] = {3}", i, j, k, x[i,j,k]);
            }
        }
    }
}
在上面的示例中,使用的 MAT 文件包含一堆double类型为多维的矩阵:
>> whos -file wind.mat
  Name       Size                Bytes  Class     Attributes
  u         35x41x15            172200  double              
  v         35x41x15            172200  double              
  w         35x41x15            172200  double              
  x         35x41x15            172200  double              
  y         35x41x15            172200  double              
  z         35x41x15            172200  double              
当然要注意的是,当您load使用带有输出参数的 MAT 文件时,它将返回一个结构,其字段是存储在该文件中的变量:
>> S = load('wind.mat')
S = 
    u: [35x41x15 double]
    v: [35x41x15 double]
    w: [35x41x15 double]
    x: [35x41x15 double]
    y: [35x41x15 double]
    z: [35x41x15 double]
因此,您可以在不指定输出的情况下加载文件,这样变量就可以作为单独的变量直接加载。