在C#应用中使用Matlab函数
2016-01-06 23:14
302 查看
在C#应用中使用Matlab函数,其实质是使用
编写matlab函数形成
通过
创建C#项目并在其中添加上一步生成的
本次测试的环境为
此次测试中matlab的编译器均被配置为
接下来在
选择红框所示的第三项
如图所示,这个界面的标题为MATLAB Compiler - Untitled1.prj,顶部为COMPILER部分,由六个模块组成,分别为
在
在
设置Namespace,若不做任何修改,namespace缺省为与库名称一样。同时在这一块已有一个自动添加的类,名称为Class1,你可以修改这个类名,为这个类添加方法,这些方法来自EXPORTED FUNCTIONS(导出的函数)。当然,你也可以再添加一些类并为他们添加方法。
对运行时做一些设置,主要是选择
最后,点击
最后生成的dll文件位于与库名称一样的文件夹中,这个文件夹又包含了三个文件夹和一个打包日志文件,本次实验中的层次结构如下所示:
拷贝到Debug目录下。MWArray.dll文件位于
至此,我们的任务完成,我们会看到在控制台成功输出了
.net组件进行混合编程,即将
.m文件生成
.dll文件,在C#项目中通过添加引用进行调用。所以可以分为以下三个步骤:
编写matlab函数形成
.m文件
通过
.m文件构建
.dll文件
创建C#项目并在其中添加上一步生成的
.dll引用
本次测试的环境为
Windows 8.1(x64)+
Visual Studio Ultimate 2013+
MATLAB R2015b。
编写matlab函数
鉴于测试目的,就以一个简单的函数为例,在此称之为myplus.m,如下:
function [s] = myplus(a, b) % Calculate the sum of a and b s = a + b;
由m文件构建dll文件
在这一步我们需要先做些环境配置,即配置matlab的编译器,这可通过在matlab的command window中输入以下两个命令来实现:
mbuild -setup
mex -setup
此次测试中matlab的编译器均被配置为
Microsoft Visual C++ 2013 Professional。
接下来在
command window中输入
deploytool,会弹出Compiler界面,如下图所示:
选择红框所示的第三项
Library Compiler,再弹出一个界面,如下所示:
如图所示,这个界面的标题为MATLAB Compiler - Untitled1.prj,顶部为COMPILER部分,由六个模块组成,分别为
FILE,
TYPE,
EXPORTED FUNCTIONS,
PACKAGING OPTIONS,
SETTINGS,
PACKAGE。其实,这个界面即为MATLAB项目构建界面,为了完成构建dll,我们需要按以下几个步骤来做:
在
TYPE界面中选择目标类型为
.NET Assemby
在
EXPORTED FUNCTIONS界面中添加函数,本次测试中添加的函数为
myplus.m。添加完函数后,
Library information界面中的Library Name自动改变为第一个添加的函数名,本次测试中库名改变为myplus,当然,你可以更改库名为你想要的名称,同时也可以对
Library information界面中的其他部分进行修改。
设置Namespace,若不做任何修改,namespace缺省为与库名称一样。同时在这一块已有一个自动添加的类,名称为Class1,你可以修改这个类名,为这个类添加方法,这些方法来自EXPORTED FUNCTIONS(导出的函数)。当然,你也可以再添加一些类并为他们添加方法。
对运行时做一些设置,主要是选择
Microsoft framework,本次试验中选择4.0(MATLAB当前支持的最高版本)。
最后,点击
PACKAGE界面中的Package,稍等片刻就会生成对应的dll。
最后生成的dll文件位于与库名称一样的文件夹中,这个文件夹又包含了三个文件夹和一个打包日志文件,本次实验中的层次结构如下所示:
在C#项目中引用dll调用matlab函数
创建一个C#控制台应用,将.Net设置为4.0,platform target设置为x64,将上一步生成的文件夹for_redistribution_files_only的不带Native的dll拷贝到Debug目录下,同时要将MWArray.dll文件拷贝到Debug目录下。MWArray.dll文件位于
%matlabroot%\\toolbox\dotnetbuilder\bin\win64\v2.0。为我们的控制台项目添加这两个dll引用,撰写如下C#代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MathWorks.MATLAB.NET.Arrays; using MathWorks.MATLAB.NET.Utility; using HelloDotNetMatlab; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Class1 myhello = new Class1(); MWArray i = 4; MWArray j = 3; MWArray result; result = myhello.myplus(i, j); Console.WriteLine(result.ToString()); Console.ReadKey(); } } }
至此,我们的任务完成,我们会看到在控制台成功输出了
7。
相关文章推荐
- MATLAB画图
- deep learning之PCA in 2D matlab 实现
- 二维最大类间方差(otsu)matlab实现源码
- Kinect桥接Matlab代码简介KinectBridge With Matlab
- matlab的log()函数默认是以e为底的
- matlab2012 toolbox 曲线拟合
- Matlab 画图函数
- Matlab install on ubuntu
- MATLAB 中的randn函数
- Matlab中size、numel、length、fix函数的使用
- Matlab plotyy画双纵坐标图实例
- 低版本MATLAB mex -setup找不到VS2013解决办法
- matlab中figure的坐标轴label、title、xticklabel的旋转
- matlab自带函数实现高斯滤波(gauss filter)快速算法
- Matlab从三维矩阵中取出一列并且reshape
- Matlab的rand(),randn()和randi()函数问题
- Matlab图像处理预处理
- Matlab图像处理:误拒率、误识率意义,计算等错误率的Matlab源码
- (转)JAVA 调用matlab
- 曼尔顿假设之MATLAB实现