美文网首页
C#调用matlab函数生成的dll

C#调用matlab函数生成的dll

作者: 堆石成山 | 来源:发表于2023-05-18 15:12 被阅读0次

    当算法是用matlab编写,而C#调用时,就需要C#调用matlab的算法函数,方法如下:
    1、编写matlab函数算法代码,并保存为.m文件;
    2、将.m文件生成.net可调用的dll;
    3、C#调用该dll。

    编写matlab函数算法代码,并保存.m文件。

    打开MATLAB R2018b,新建脚本


    新建脚本

    编写函数代码,保存.m文件,函数实现功能求数组的平均值,代码如下:

    function result=CalculateMagneticField(input)
      result=mean(input);
    end
    

    将.m文件生成.net可调用的dll

    在Matlab命令窗口输入deploytool


    调出工具

    选择Library Compiler,并安装如下图方式填入信息,即选择.NET Assembly,导入.m文件,填写命名空间namespace,类名class name,点击Package打包成dll即可


    生成dll

    C#调用生成的dll

    新建winform程序,添加引用CalculateMagneticField.dll


    引用生成的dll

    还需添加matlab数组特有转换使用的dll(NWArray.dll),路径为C:\Program Files\MATLAB\R2018b\toolbox\dotnetbuilder\bin\win64\v4.0\NWArray.dll


    NWArray.dll
    添加一个button,2个textbox,编写C#代码如下:
          try
                {
                    //把textBox1输入的数据转换为数组
                    string[] temp = textBox1.Text.Split(',');
                    double[] input = new double[temp.Length] ;
                    for (int i = 0; i < temp.Length; i++)
                    {
                        input[i] = double.Parse(temp[i]);
                    }
                    //实例化类,调用函数方法
                    CalculateMagneticFieldTask task = new CalculateMagneticFieldTask();
                    MWArray arrs = (MWNumericArray)input;
                    MWArray y = task.CalculateMagneticField(arrs);
                    //结果转数组,显示在textBox2中
                    string[] resultStr = y.ToString().Split(' ');
                    List<string> str = new List<string>(); 
                    for (int i = 0; i < resultStr.Length; i++)
                    {
                        if (resultStr[i] != "")
                            str.Add(resultStr[i]);
                    }
                    string[] result = str.ToArray();
                    textBox2.Text = "";
                    for (int i = 0; i < result.Length; i++)
                    {
                        if(i< result.Length-1)
                            textBox2.Text += result[i]+",";
                        else
                            textBox2.Text += result[i] ;
                    }
                   
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    

    选择x64的平台(matlab的dll是64位的),执行结果如下(首次调用会比较慢):


    执行结果

    执行时如果出现以下错误,调用类的方法时,出现“”的类型初始值设定项引发异常,可能是没有matlab的环境


    错误举例

    以上就是C#调用matlab函数生成的dll的方法。
    参考:https://blog.csdn.net/orangapple/article/details/117992471

    相关文章

      网友评论

          本文标题:C#调用matlab函数生成的dll

          本文链接:https://www.haomeiwen.com/subject/drnwsdtx.html