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、数据类型的问题
本文所述的背景是一个多元线性回归的项目。核心代码如下:
将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
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
相关文章推荐
- 【数据挖掘】Matlab与C#混合编程
- matlab与C#混合编程小例子
- 关于MATLAB和c#混合编程以及如何打包的
- 【转】Matlab和C#混合编程
- MATLAB与C#混合编程
- C#与MATLAB混合编程常见错误
- Matlab与C#混合编程
- matlab与C#混合编程
- Matlab与C#混合编程环境设置
- Matlab和C#混合编程之数组传值
- 小记Matlab与C#混合编程
- C#与MATLAB混合编程实例
- Matlab模型与实际数据对接+C#混合编程
- [置顶] MATLAB和c#混合编程实现心电图显示软件
- 一个基于COM组件的Matlab与C#混合编程实例
- 关于matlab与c#混合编程产生的移植问题
- C#与Matlab混合编程入门教程一:几种混合编程的方法
- C#与MATLAB混合编程
- matlab与c#混合编程之图像参数传递
- MATLAB与C#混合编程