c#与matlab联合编程

        最近发现matlab在做矩阵计算的时候超级方便,但是项目的大部分代码都是C#写的,不想再用matlab写一遍了 ,所以琢磨着怎么在C#里面调用matlab的函数。上网一搜还真有,不得不说程序员们真是勤奋。

        第一步,在matlab上编写需要的函数。除了函数我确实没想到其他信息交流的办法了,就建个函数,让C#那边调用吧。

                                                          

      第二步,安装matlab的runtime,在matlab命令行中输入mcrinstaller,返回runtime安装文件的存放位置,按照提示到指定位置安装即可。MATLAB Component Runtime 简称 MCR,主要用于把MATLAB编写的东西打包到没装MATLAB的机器上使用。它是一组独立的共享库,通过它能够执行在MATLAB中编写的M文件。MCR支持MATLAB语言的所有功能。

       对了,matlab一定要正确安装破解,破解不成功的,这一步是会安装失败的。

                               

        第三步,输入指令deploytool,在弹出的对话框中选第3个,Library Compiler

                           

      第四步,弹出的界面中,选择.NET Assembly,并且右边框中选我们刚刚保存的.m文件

                            

界面下方可以预览生成的.dll文件中的namespace,Class和Method

扫描二维码关注公众号,回复: 3902412 查看本文章

                           

          第五步,在下方Additional Runtime Settings中,选择自己电脑Framework的版本号。我都是直接选最高版本的。

                       

          第六步,package。这儿有个5MB的和807MB的,区别就是刚刚我们安装的runtime是否被包含在package里面。我猜测这个东西如果我们选了5MB的不包含的话,在没装runtime的电脑上是使用不了的。然鹅我电脑刚刚装了runtime所以我选了5MB的这个。

                       

          第七步,在弹出的文件夹中,打开for_redistribution_files_only,拷贝出其中的PaintLineNative.dll至vs工程下。注意,这里我建议选择XXXNative.dll,因为不加Native的那个dll,在函数的输入输出参数上需要一些特殊的转换,看起来很麻烦的样子。

           然后,在.\matlab\toolbox\dotnetbuilder\bin\win64\v2.0文件夹下,找到MWArray.dll文件,拷贝到vs目录下。

                                             

         第八步,引用这两个dll

               

         第九步,右键项目,属性。在配置管理器中将所有的Any CPU改成x64

                          

         第十步,新建button控件,在PaintLineNative命名空间下实例化一个Class1。并且这个类调用PaintLine函数。这里注意,matlab函数的参数必须为一个二维数组,即使这个二维数组的两个维度长度都为1,不然会报错。

                                

点击调试,按下button1,等待几秒,即可弹出matlab的figure1,证明C#工程已经成功调用Matlab的函数。

                      

 

 

 

总结:

  1. 整个过程中不太顺利的是安装runtime和matlab函数的参数必须是二维数组。前者是提前不知道,后者是完全想不到还要这么做。
  2. 第一次调用matlab函数耗时很长,如果再调用就耗时很短了,猜测是dll要加载到内存需要时间。所以,可能选择那个807MB的会解决这个问题?
  3. 除了1中提到的两个问题,整个过程很顺利,暂时没踩到其他坑。

猜你喜欢

转载自blog.csdn.net/pofeiren1069/article/details/82942193
今日推荐