C#调用C++的dll及MATLAB的dll的方法(二)

在上一篇博客中咱们介绍了一下如何利用C#调用C++封装的托管代码,这一篇咱们介绍一下如何用C#调用MATLAB封装的代码。测试

MATLAB的程序完成的功能主要是人脸对齐和图像的crop操做,以便后面送给分类器进行人脸属性的预测。原本想着用C++从新实现一次,这样就能够按照上面的C#调用C++的dll方式再作一次。可是呢,不管我采用什么方式出来的结果老是和MATLAB的结果不同。我训练模型所用的训练数据和测试数据所有用的都是MATLAB获得的结果,所以别无选择了,只能还用MATLAB的程序,而后就想到了用C#调用MATLAB的dll。其实我试过先把MATLAB包装dll让C++调用,再用C#调用C++,可是失败了。。。由于在vs2013的C++程序里调用MATLAB的dll仍是要配置不少东西的,包括一些依赖的dll和lib,所以当我把他们包装起来送给C#的时候老是提示缺乏依赖的dll,而后我就无奈了,而后我就决定仍是用C#直接调用MATLAB吧。事实证实,C#直接调用MATLAB其实更方便。优化


前面一篇博客提到个人环境是win7 64位+vs2013+MATLAB2015。坑就坑在MATLAB版本太新,网上全部的资料显示的都是MATLAB2012,2010,甚至还有2005!!!他们提到的建立MATLAB的.Net工程,原谅臣妾真的找不到在哪里啊。。。因此后来干脆瞎鼓捣吧。好在凭借着不笨的脑子,搞出来了!
貌似MATLAB一直都是支持建立.Net工程的,就是为了不少人可能会用到跨语言和平台进行调用。并且,不一样的语言有不一样的优点,虽然MATLAB大多数功能C++能够实现,甚至若是是图像处理相关的操做,opencv基本能够搞定。可是从写代码的难易来说,我以为MATLAB语言更好写一点,对于矩阵(图像也是矩阵的存储方式)来讲更是优化了许多操做,各类对矩阵的操做也很好写。所以,在C#调用MATLAB的dll不太麻烦的状况下,是比较建议用MATLAB作的。固然,这个纯属我的观点。
若是要让C#调用MATLAB的dll,首先要生成C#认同的dll版本,这个生成的过程和C++差异挺大的,我不太清楚,C++能够用的dll和C#能够用的dll是否是相同的,不过有心的童鞋能够本身试试。博客