C#与Matlab2014a混合编程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C#与Matlab2014a混合编程
为了实现C#与Matlab混合编程,费了好大劲才实现生成的DLL 文件能够正常调用,而不出现调用组件报错“初始值设定项引发异常”的问题。
网上有很多资源可供参考,可惜参差不齐,特把解决过程记录,方便后面想学习的朋友。
首先感谢网络上各位友人提供的解决方法,希望该教程对各位新朋友有帮助。
By Masterjay at XMU
2015‐07‐09
1、调试成功平台
(1) 系统平台
WIN7 64位
(2) 软件版本
VS2010 C# & Matlab 2014a 64位
(注:matlab 2014b 版本有朋友说没办法生成DLL文件,请注意哦!另外,注意各个版本的位数,这个是有差别的哦!)
2、Matlab生成C#可调用的DLL过程
(1)配置Matlab的编译器
1)在MATLAB的命令窗口中输入 mbuild –setup 会弹出:
(这是我之前已经配置好的原因哦!)
未配置时弹出:
在弹出的选择项中,使用默认的[y](直接回车就是选择默认值),让Matlab自动搜索可
用的编译器。
如果只安装了vs2010(如果未安装,请先安装),会弹出可选编译器为:
填1,回车。
填y,回车。
到这里,配置都成功了。
(2)建MATLAB的.NET工程,生成DLL文件。
1)在控制命令窗口中输入:deploytool
2)选择Library Compiler 进入工程界面
配置如下:
(注:Class1改的名字不能与Matlab的函数名字一样,否则无法生成哦)
打开输出的路径:”Open output folder”就可以看到生成的文件。
其中Multiply_m.dll文件即为C#可调用的文件。
Matlab的程序如下,记得文件名要与程序名称一致哦。
(3)建立VS2010的C#窗体应用程序
得到如下窗体,并添加相应控件
修改控件属性得到如下结果:
添加DLL应用文件:
引用文件:
1)生成的:Multiply_m.dll
2)MWArray.dll:Matlab安装目录下\toolbox\dotnetbuilder\bin\win64\v2.0 添加C#代码:
双击“计算”按钮,进入代码编写界面
using System;
using System.Collections.Generic;
using ponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using .Arrays;
using Multiply_m;
namespace Multiply_Test
{
public partial class Form1 : Form
{
int A,B;
public Form1()
{
InitializeComponent();
A = 1;
B = 2;
}
private void button1_Click(object sender, EventArgs e)
{
Multiply myMul = new Multiply();
MWArray result = myMul.multiply((MWArray)A,(MWArray)B);
bel2.Text = result.ToString();
A++;
B++;
}
}
}
代码填写完成后,一定要配置工程为X64位的,否则出现如下错误:
工程配置方法如下:
在“生成”里找到“配置管理器”,点击:
改为:
配置完成之后,就可以运行了。
第一次运行速度很慢,再次点击后,速度就会加快了哦!
注意事项
1、导致错误的可能原因还有:
1)安装MCRinstaller.exe,它的位置在matlab安装目录下toolbox\compiler\deploy\win32\MCRInstaller.exe(这个是免费的哦)
2)注册,我们可以在其他编辑器下可以对其进行调用在cmd下进入matlab下的 bin/win32的目录下,输入regsvr32 mwcomutil.dll 注意32后面还要一个空格。
3)引用的.m文件所在目录不能有空格、中文字符等,建议放在根目录下,防止出错。
可参考的其他说明:
/html/blogs/20131107/94039.htm
/link.php?url=/zilin82/article/details/5 466087
/s/blog_4b94ff130100d4uf.html。