c#调用matlab生成的dll,这个过程分为三步:
1、编写matlab代码
2、将.m文件编译成dll
3、在C#代码里调用dll
打算实现的功能:
求x*y的二维数组的均方差
一、编写matlab代码
matlab代码如下:
function result = CalculationVar(img_in, x, y)
result_std2 = std2(img_in);
result = [result_std2, x, y];
end
保存的文件名称为: CalculationVar.m
img_in 是二维数组,本文是 512*512的二维数组
x:行数,本文是512
y:列数,本文是512
二、将.m文件编译成dll
1. 在matlab的命令行窗口,输入 deploytool
2. 弹出如下的对话框:
选择Library Compiler,弹出如下对话框:
TYPE栏选择.NET Assembly, 点击 + 号,选择 CalculationVar.m文件,将Class Name 改成 CalculationVarClass,最后点击 Package 按钮, 提示是否保存 CalculationVar.prj,选择是,等待生成
生成完成后,如下所示:
三、在C#代码里调用dll
新建c# winfrom的工程,界面上放个按钮,如下图
添加引用:CalculationVar.dll 和 MWArray.dll
在 MATLAB\CalculationVar\for_redistribution_files_only 找到 CalculationVar.dll
在 MATLAB\R2018b\toolbox\dotnetbuilder\bin\win64\v4.0 找到 MWArray.dll
点击事件代码如下:
private void button3_Click(object sender, EventArgs e)
{
try
{
//构建512*512二维数组
double[,] arr = new double[512, 512];
for (int i = 0; i < 512; i++)
{
for (int j = 0; j < 512; j++)
{
arr[i, j] = 27000 + i + j;
}
}
CalculationVarClass cvar = new CalculationVarClass();
MWArray arrs = (MWNumericArray)arr;
MWArray x = 512;
MWArray y = 512;
MWArray result = cvar.CalculationVar(arrs, x, y);
string strResult = result.ToString();
}
catch (Exception ex)
{
string error = ex.Message;
}
}
最后得到的结果是 209.0231 512.0000 512.0000