如何在不需要MCR/MATLAB的情况下,在C#中使用MATLAB编译的DLL?

5
抱歉,如果这个问题已经被提出,请见谅,但我没找到我一直在寻找的东西。 我想知道是否有一种方法可以在没有使用MCR / MATLAB(或通常任何其他安装)的情况下在C#中使用MATLAB编译的c-shared库,例如使用此简单函数test.m,通过mcc将其编译成.dll文件,然后在C#中使用它:
[x,y,z]=test(a,b,c)
%x,a are integers
%y,z,b are matrices
%c is a string (which e.g. could be used to switch between several modes)


x=a*a;
y=b*b-b;
z=y*y;

我不确定是否可以(更不用说容易了),但即使使用这个简单的例子,我也无法在C#中使其工作,尽管这可能与我的非常有限的C#经验有关。我想在这个例子中,我必须使用IntPtr来处理矩阵,例如:

[DllImport("test.dll",EntryPoint="mlfTest")]
public static extern void testfunction([In] numargout, ref IntPtr x, ref IntPtr y, ref IntPtr z, [In] IntPtr a, [In] ref double[,] b, [In] ref c)

然后稍后尝试通过与Marshal的一些处理来获取x,y,z中的数据?我想我也犯了一些非常明显的错误,例如我不确定是否可以只传递ref double[,]到dll并期望它能正常工作。

如果绝对必要,我想我可以使用MCR(这将使事情变得容易得多),但现在我受制于此。

感谢您的帮助。


什么是问题所在?请描述您使用当前方法得到的结果,例如错误/异常、意外行为等。 - Qnan
2个回答

3
很遗憾,您所要求的是不可能实现的。任何由MATLAB编译器生成的内容都需要在系统上安装MATLAB运行时环境,无论是作为MATLAB安装本身的一部分还是单独安装。为什么?因为生成的代码调用了这些库。
您知道可以免费分发MCR安装程序而不涉及任何版税问题,对吗?
另一方面,如果您真的想摆脱MATLAB,那么您需要看看MATLAB Coder。它是MATLAB中唯一一个让您创建真正独立代码的组件(我所知道的)。坏消息是,它只输出到C/C++。

抱歉回复晚了,但是谢谢。我换成了MCR,幸运的是(尽管有些小问题),它还是相当容易的。谢谢。 - user1517063

1

正如其他人所说,使用MATLAB编译器生成的任何内容都需要MCR。

将MATLAB和C#集成的另一个选项是使用MATLAB COM Automation。请参见此处的示例:

using System;

namespace testMATLAB
{
    class Program
    {
        static void Main(string[] args)
        {
            MLApp.MLAppClass matlab = new MLApp.MLAppClass();

            System.Array pr = new double[4];
            pr.SetValue(11, 0);
            pr.SetValue(12, 1);
            pr.SetValue(13, 2);
            pr.SetValue(14, 3);

            System.Array pi = new double[4];
            pi.SetValue(1, 0);
            pi.SetValue(2, 1);
            pi.SetValue(3, 2);
            pi.SetValue(4, 3);

            matlab.PutFullMatrix("a", "base", pr, pi);

            System.Array prresult = new double[4];
            System.Array piresult = new double[4];

            matlab.GetFullMatrix("a", "base", ref prresult, ref piresult);
        }
    }
}

谢谢,我选择了MCR。使用MATLAB COM自动化或MATLAB Coder是不可能的(因为这需要紧急完成),也许将来我会考虑它。谢谢。 - user1517063

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