利用C#和Matlab混合编程

  • 为什么要进行混合编程

    利用双方的优势,便捷地构建用户交互界面+科学计算上强大的性能

    实际中是需要将一些科学算法转化到应用软件的项目中去

  • 过程 (C#调用Matlab)

    1. 将M文件转换为c#可调用的 dll文件 (如何生成

      • 利用C#和Matlab混合编程

    2. 在C#中引用 dll 文件 (如何引用

      • 添加所需的引用 dll

      • 命名空间的的引用

    3. 编程中c#数据类型的转换(两者之间的函数变量的传递时如何实现的)

      • C#的参数带入到Matlab函数的的参数中去,将C#的参数类型转换为MWArray类型

      • 如何将Matlab函数返回的类型,转换成C#对应的函数类型

  • 注意事项

    1. 需要额外添加的dll MWArray.dll (在安装目录的toolbox\dotnetbuilder\bin\win64\v2.0文件夹中)

    2. 脱离Matlab安装的环境下,如何使得程序运行自如

      • 安装Matlab提供的 Matlab Compiler Runtime

        (目录X:\MATLAB\R201Xx\toolbox\compiler\deploy\win32 \MCRInstaller.exe)

      • 不同Matlab提供的MATLAB Compiler Runtime可能会不同,如果其他电脑上运行自己编写的软件有问题,可能是编译器的版本所导致的

  • 实例

    C#调用Matlab画图

    实验环境 : Matlab 2017 Visual Studio 2017

    1. M文件

      function [s]=myplus(n)
      
      s = 0;
      for i = 1:n
          s = s + i;
      end
      
      end
    2. 打包为dll

      • 进入library complier

        利用C#和Matlab混合编程

      • 选择目标类型及打包函数,以及是否需要将runtime打包到package中去

      • 填写打包函数调用的相关信息如class namemethod name

        利用C#和Matlab混合编程

      • 进行打包,生成dll文件(for_redistribution_files_only里面包含的文件,即为打包好的函数库dll文件)

        利用C#和Matlab混合编程

    3. C#中调用

      • 添加dll (打包的 及 MWArray)

        利用C#和Matlab混合编程

      • 添加命名空间

        using MathWorks.MATLAB.NET.Arrays;
        using MathWorks.MATLAB.NET.Utility;
        using myplus;
      • 编程运行

    private void button1_Click(object sender, EventArgs e)
            {
    
                {
                    MWArray a = 5;
                    MWArray b;
                    plus pa= new plus();
                    b = pa.myplus(a);
                    textBox1.Text =b.ToString ();
                }
               
            }

    利用C#和Matlab混合编程

相关文章: