C#与Matlab混合编程的几种方式

来源:本站
导读:目前正在解读《C#与Matlab混合编程的几种方式》的相关信息,《C#与Matlab混合编程的几种方式》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C#与Matlab混合编程的几种方式》的详细说明。
简介:该文章讲述了C#与Matlab混合编程的几种方式.

下面简单写写C#与Matlab混合编程的4种方式(可能还不够全,欢迎补充):

1.通过从Matlab的*.m文件中生成C语言版本的DLL

具体过程:

1) 在Matlab中写好一个m文件(比如一个简单的加法函数myplus.m);

2) 使用Matlab的mbuild -setup选择编译器,我机器上的编译器有两个LCC和VC2008(注意如果使用VS.net做应用的话,建议编译器选VC2008,否则C#中会告诉你DLL找不到Entry Point)

3) 在命令行中使用mcc -B csharedlib:mypluslib myplus.m (如果是多个M文件,接着往后写),等待几十秒之后会生成若干文件(*.c, *.h, *.dll等), 其中.h文件中有导出的函数原型。

4) 建立C#工程,并将前面的dll拷贝到合适路径,使用[ DllImport( "mypluslib.dll ", CallingConvention = CallingConvention.Cdecl)] 将.h文件中的函数使用C#的语法声明。一般来说,这些函数中会有**Initialize,**Terminate和M文件中定义的函数(**代表lib名称)。

5) 使用CsharpMatlabCompilerVer4.cs将C#中的数据类型和Matlab中的矩阵等类型进行变换。该文件定义了MatlabCSharp类,主要是导入了libmx.dll中的一些函数,并封装了一些实用的函数如double2mxArray_scalarReal等。

2. C#调用Matlab工作区计算并返回结果

主要使用engOpen, engClose, engPutVariable, engEvalString,engGetVariable函数进行操作。

大致过程如下:

MatlabCSharp.engPutVariable(ep,"ml_a",mx_a);

MatlabCSharp.engPutVariable(ep,"ml_b",mx_b);

MatlabCSharp.engEvalString(ep,"ml_c=ml_a+ml_b;");

mx_c=MatlabCSharp.engGetVariable(ep,"ml_c");

3. 使用Matlab DeployTool生成COM组件

注: 老版本的叫ComTool,现在叫做DeployTool。在Command Window里面直接输入deploytool即可

1) 选择New Deployment Project -> MATLAB Builder NE -> Generic COM Component

2) 添加相应的M文件

3) 保存,编译

4) 新建C#工程,添加Reference, Ok

4. 使用Matlab DeployTool生成.Net组件

1) 选择New Deployment Project -> MATLAB Builder NE -> .Net Component

2) 添加相应的M文件

3) 保存,编译

4) 新建C#工程,由于经常要using MathWorks.MATLAB.NET.Arrays;

using MathWorks.MATLAB.NET.Utility;

因此需添加MWArray这个Reference,一般安装玩MATLAB Builder NE就有了,放在GAC当中的。

提醒:《C#与Matlab混合编程的几种方式》最后刷新时间 2024-03-14 01:01:24,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C#与Matlab混合编程的几种方式》该内容的真实性请自行鉴别。