工具版本:VS2015,Matlab2016b
一、安装MCRInstaller
安装包的位置就在matlab的安装目录下,如我的(D:\Program Files\MATLAB\R2016b\toolbox\compiler\deploy\win64)
双击MCRInstaller.exe按照步骤一步步安装即可
此安装包主要是用于matlab打包文件所用。
二、编写matlab函数文件MySmooth.m
function result=MySmooth(data,sigma)
result = smooth3(data,'box',sigma);
end
此函数作用是对三维数据进行平滑,result中是平滑后得到的数据
三、用matlab将函数打包为C#可调用的dll文件
1、打开Library Compiler
2、选择指定项、添加自己的.m文件(如果有多个.m文件,在第二步全部添加即可)、修改类名(可改可不改,c#中调用时会用)
3、完成时的截图
4、选择保存路径后, 进入打包过程,等待完成即可
5、 生成dll文件
四、用vs2015创建控制台应用,并引用两个dll文件,第一个即上一步生成的dll文件,我的是MySmooth.dll文件,路径你已经知道了,第二个文件是MWArray.dll(此文件的作用是c#与Matlab数据类型间的转换),路径是:D:\Program Files\MATLAB\R2016b\toolbox\dotnetbuilder\bin\win64\v2.0,你们类比下自己的即可。
using dosefromge;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MathWorks.MATLAB.NET.Arrays;//添加对MWArray的引用
namespace cCallMatlab
{
class Program
{
static void Main(string[] args)
{
double[,,] list = new double[40, 40, 40]; //列向量
Random r = new Random();
for (int i = 0; i < 40; i++)
{
for (int j = 0; j < 40; j++)
{
for (int x = 0; x < 40; x++)
{
list[i, j, x] = r.Next(100);
}
}
}
MWArray array = new MWNumericArray(list);
MySmooth.Smooth smooth = new MySmooth.Smooth();
MWArray result = smooth.MySmooth(array, 3);
double[,,] resultList = (double[,,])result.ToArray();
Console.WriteLine(result.ToString());
//DoseCalc doseCalc = new DoseCalc();
//MWArray doseTest=doseCalc.main_gecalc();
//double dose = double.Parse(doseTest.ToString());
//Console.WriteLine("doseTest值:"+dose);
Console.ReadKey(); //防止控制台直接结束
}
}
}
运行结果:
ps:说一下运行时踩过的坑:
1、程序直接报错:试图加载不正确的程序等,可能是因为x64或x86的原因,反正我的是因为这个
解决:
ps:如果电脑是32位的,只有matlab2015b以及之前的版本才有32位安装包。制作流程跟上述64位相同。vs环境要设置为x86(设置AnyCPU,首选32位也不行)