C#调用matlab函数生成的dll

2023-05-18  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读