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