您的位置:首页 > 编程语言 > MATLAB

Matlab与C#混合编程

2015-05-28 10:20 363 查看
本文主要对项目中遇到的一些问题进行总结。希望达到的目的是使一个Matlab与C#混合编程的小白(博主在写这篇文章的时候,就是一枚小白)能够通过本文的步骤,Step by Step,顺利将Matlab函数打包成dll并且应用到C#代码中去。下面进入正题:

1、编程环境

VS与Matlab存在版本匹配问题,另外和计算机系统的位数(32位/64位)也有关系。本人的开发环境是:

系统:Win7旗舰版 64位

VS版本:VS2010

Matlab版本:Matlab R2014a

2、将Matlab函数打包成dll

①、选择编译环境

在Matlab编程环境下,输入 mbuild -setup,得到如下输出界面

信息显示,已经选择了Microsoft Visual C++ 2010(c)作为编译器,如果安装了多个编译器环境的,请选择相应的编译器即可。

②、进入dll打包应用

选择Library Compiler

1、选择.Net Assembly

2、点击后面的“+”,选择要打包的函数

3、根据需要选择是否将runtime打包到package中

4、填写相关信息,可缺省

5、填写相关信息,可缺省

最后,在一切配置完之后点击,右上角,package进行打包。打好包之后,会自动跳转到打包的文件夹下:

其中,for_redistribution是

for_redistribution_files_only里面包含的文件,即为打包好的函数库dll文件

for_testing是

PackagingLog.txt是打包日志

3、在C#里面调用dll文件

①、首先,在工程中添加两个Reference,一个是打包生成的dll,另外一个是MWArray,位置位于:

②、添加using

using HLM;

using MathWorks.MATLAB.NET.Arrays;

using MathWorks.MATLAB.NET.Utility;

③、使用dll函数

在C#中使用Matlab库函数出现的两个问题,见附录

附录,在使用过程中存在的问题:

1、引入dll之后,在创建对象的时候出错

HLM hlm = new HLM()

HLM为类名,报错信息为:

有博友指出可以用以下方法解决:

①、查验是否注册了regsvr32 mwcomutil.dll

②、如果已经注册了,则将MCRInstaller.exe(路径为:D:\Program Files\MATLAB\R2014a\toolbox\compiler\deploy\win64)重新安装一下到C盘,然后将再将regsvr32 mwcomutil.dll重新注册

但实际上,并非如此,在本机,在安装了Matlab的情况下,是不用再安装MCRInstaller的,用TypeInitializationException去检索,发现,将输出平台改为X64即可

在工程名称上右击选择Properities即可弹出该选框。

2、数据类型的问题

本文所述的背景是一个多元线性回归的项目。核心代码如下:

<span style="font-size:18px;">double[] y = new double[]{10.2,20.8,30.5};
int[,] x = new int[,] { {1,2,3,4},{5,6,7,8},{9, 10, 11, 12}};//4个变量,3个样本

HLM.HLM hlm = new HLM.HLM();
MWArray result = hlm.HLM_Level1((MWNumericArray)y, (MWNumericArray)x);</span>


将int数组改为double就可以解决这个异常

参考资料:

1、http://www.csdn123.com/html/blogs/20131107/94039.htm

2、Matlab、C#混合编程引擎方式:http://blog.sina.com.cn/s/blog_6f7265cf0101nqhw.html

3、Matlab、C#混合编程Net组件:http://blog.sina.com.cn/s/blog_6f7265cf0101nqm1.html

4、Matlab、C#混合编程Com方式:http://blog.sina.com.cn/s/blog_6f7265cf0101nqpi.html

4、C#与Matlab混合编程入门之Net组件方式:http://www.csdn123.com/html/blogs/20131107/94039.htm

5、C#调用Matlab函数:http://bbs.pinggu.org/thread-3568484-1-1.html

6、C#调用Matlab函数:http://www.tuicool.com/articles/nqaEry

7、C#与Matlab数据交换与数据类型:http://wenku.baidu.com/link?url=ed1ox1OqKYHRMb2R4kBZaoGYplHZ4qWwHoEHRqR3m_eLAXY897WhpTCjoAO3Kmtuwax_-6WpjY7N4-jqVuuce26mq_yv9xm5ma5vaZFIGqO

8、C#与Matlab混合编程实例:http://wenku.baidu.com/link?url=MD31_KTkIKPh86vPMxamhgXLfNDz2DuxWTMxLrHBXxm3mnscsoeCuqacUK94_HVT06JLcp4mLV7dSji_TMJ8qIxOgq0yJX8XF8wxTrRQu-K

9、C#,.NET机器学习与彩票数据分析:http://www.cnblogs.com/asxinyu/p/4265972.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: