CSharp与Matlab混合编程

C# 与 MAtlab 混合编程

本文最初2014年发表在新浪博客,由于博客关闭计划将其搬移到本网站。

本文说明如何使用matlab和.net进行混合编程。包括:

  • 1、使用Matlab2010b&VS2010,vb.net编程(下文A部分)
  • 2、使用 Matlab 2017b & VS Community2017,C#混合编程。注意c#程序使用.net4.0编译(下文B部分)
  • 3、在.net(C#,vb)中如何处理m文件返回的多个结果
  • 4、MWArray结果的下标注意事项

A 部分

版本:Matlab2010b&VS2010
Matlab中需要以m文件Function形式,要有输出

  • 1、在Matlab中输入

deploytool
将编写好的函数文件拖入下图中的位置即可,编译的时候选择 .NET DLL

文件位置

  • 2、编译后,在VS中引用
    引用MWArray.dll(在Matlab安装路径)

dll引用

  • 3、引用Matlab生成的dll文件

dll引用2

  • 4、用记事本打开Class_VB.cs

在第一步时,你Class名称。在Matlab生成的文件路径下

class路径

  • 5、引用

引用

引用2

上面两幅图,第一幅是Class_VB.cs文件内容,第二幅是在VB.NET 中的引用。

  • 6、CPU选择(如果都是x86,可忽略;我Matlab/VS版本为64位的)

CPU

  • 7、编写代码运行

运行

OK,基本功能实现!

B 部分

版本:Matlab 2017b & VS Community2017

  • 1、需要安装 MATLAB Compiler和MATLAB Compiler SDK
  • 2、输入deploytool

Compiler

选Library Compiler

  • 3、选.Net Assembly,选Runtime included in package会将matlab的runtime打包。这样我们就可以在其它电脑上运行这个程序了。见下图

Compiler2

  • 4、点击 Save,见上图
  • 5、点击Package,见上图
  • 6、新建C#或VB.Net工程,注意.Net版本要用4.0版。需要引用MWArray.dll,以及上面生成的TcFigData.dll
  • 7、编译。Debug的时候选AnyCPU。打包后会自动生成一个cs文件,就是你打包时填写的Class Name对应的cs文件。我这里是tcFig.cs,里面包含函数调用的方法。

C#代码示例:

CSharp

上图包含m文件的函数结构,以及m文件多个结果返回的处理方法。
输出结果:

CSharp2

其中9331是301*31的cell。

  • 8、安装。在其它电脑上先安装matlab runtime,在for_redistribution文件夹里(前提是你打包的时候选了Runtime included in package)

程序文件夹

9、运行你编写的.net程序