C# MATLAB混编(一)
参照这篇博客进行的C# MATLAB混编学习,学习过程中文章中的一些问题我并没有遇到,但是我遇到了一些新问题,这些问题的解决办法将在下一篇博客给出。
配置环境:vs2010(64位)+Matlab2013a(64位)+win10(64位)
以Matlab安装路径:C:\Program Files\MATLAB\R2013a为例
1.定义Matlab文件,twice.m
function result=twice(inputvar)
result=2*inputvar
end
2.Matlab编译器设置
在command window中配置分别配置>>mbuild–setup和>>mex–setup.
编译器均选择 VS2010
在command window中>>deploytool。先创建project,选择.NET Assembly类型;然后把myplus.m文件添加到project里面,然后点上面菜单条上的build the project
3.环境安装及dll注册
需要安装MCRinstaller.exe(本机则不需要),它所在的位置是:C:\Program Files\MATLAB\R2013a\toolbox\compiler\deploy\win64;
在路径C:\Program Files\MATLAB\R2013a\bin\win64里,对mwcomutil.dll进行注册(这个dll是matlab下作的任何com组件都要用到的dll),下面我们在其他编译器下调用时就可以用了。regsvr32 mwcomutil.dll
问题:提示错误为注册dll模块的原因(Error: DllRegisterServer in E:\Matlab2010b\bin\test\src\test_1_0.dll failed)
解决:点“开始”->“Windows系统”->“命令提示符”右键“以管理员身份运行”,在cmd中输入regsvr32 mwcomutil.dll 。这样应该就可以了。
4.dll引用
从C:\Program Files\MATLAB\R2013a\toolbox\dotnetbuilder\bin\win64\v2.0复制出MWArray.dll到debug目录下,从HelloNet\distrib里的HelloNet.dll复制到debug目录下。然后添加引用,浏览debug目录。
5.在c#中简单做一个windowsapplication
程序中需要引用的命名空间有:
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
using dlldemo;
在按钮事件里的代码是:
private
void button1_Click(objectsender,EventArgse)
{
Class1myhello =
new
Class1();
MWArrayi = 3;
MWArrayresult;
result = myhello.myplus(i);
label1.Text = result.ToString();
}
问题:C#在调用dll初始化matlab生成的类时,总是提示:typeInitialization exception类型初始化设定异常,网上找了好久,试了个各种解决方法
解决:原来是在build dll时,选择的.m文件的所在路径不能包含中文/空格,我把.m文件直接移到了根目录下的某个不含空格和中文的文件夹下,然后把在这个文件夹下的.m文件拖到myTest.prj中,build,VS中重新引用生成的新的dll,发现程序正确。
注:我在按照这个教程进行操作的过程中遇到两个问题:
1、当我在matlab中输入mbuild -setup后 报错
2、总是提示:typeInitialization exception类型初始化设定异常,在改变路径后还是存在这个问题,解决办法将在下一篇博客给出。
参考博客:http://blog.sina.com.cn/s/blog_6f7265cf0101nqm1.html
C# MATLAB混编(一)的更多相关文章
- python 与 matlab 混编
用于 Python 的 MATLAB 引擎 API 快速入门 安装用于 Python 的 MATLAB 引擎 API Matlab的官方文档中介绍了 Matlab 与其余编程语言之间的引擎接口,其中包 ...
- C# MATLAB混编(二)
在上一篇博客中说到按照参考教程操作之后依然有两个问题. 问题1:当我在matlab中输入mbuild -setup后 报错 解:这是因为VS与Matlab存在版本匹配问题,理论上来说vs版本最好 ...
- Matlab与.NET混编解决人脸识别问题
原文 http://www.cnblogs.com/asxinyu/archive/2013/05/29/3107013.html 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的 ...
- Matlab.NET混编技巧之——找出Matlab内置函数
原文 http://www.cnblogs.com/asxinyu/p/3295309.html Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯 定不难.反之,有时 ...
- Matlab与C混编的介绍
原本写给一个朋友的,帮助她入门matlab与C混编的 >#####环境: * Matlab:MATLAB R2013a * C编译器VC++2012 === #####配置环境: 在**Matl ...
- Matlab高级教程_第二篇:一个简单的混编例子
1. 常用的混编是MATLAB和VS两个编辑器之间的混编方式. 2. 因为MATLAB的核是C型语言,因此常见的混编方式是MATLAB和C型语言的混编. 3. 这里介绍一个简单的MATLAB语言混编成 ...
- Matlab高级教程_第三篇:Matlab转码C/C++方式(混编)_第一部分
0. 其实Matlab的转码混编大多数就是为了现成的算法函数不用再写了,2就是为了方便提高代码运行速度用C语言去运行. 1. MEX文件: Mex文件是一种可在matlab环境中嗲用C语言(或fort ...
- Swift和Objective-C混编注意事项
前言 Swift已推出数年,与Objective-C相比Swift的语言机制及使用简易程度上更接地气,大大降低了iOS入门门槛.当然这对新入行的童鞋没来讲,的确算是福音,但对于整个iOS编程从业者来讲 ...
- iOS 里面 Swift与Objective-C混编,Swift与C++混编的一些比较
即使你尽量用Swift编写iOS程序,难免会遇到部分算法是用C++语言编写的.那你只能去问问”度娘“或“狗哥”怎么用Swift调用C++算法. 一,C,C++, Objective-C,S ...
随机推荐
- delphi 读写文本文件(函数比较全)
需要两个按钮和两个Richedit控件,采用默认名称即可. procedure TForm1.Button1Click(Sender: TObject); //写文件 var wText: Text ...
- 平衡二叉树 JAVA实现 亲测可用
平衡二叉树的JAVA实现 亲测可用 包括LL LR RL RR四种情况的旋转算法 以及添加删除树结点之后对平衡二叉树的维护算法 都已经实现并测试过 没有问题. 代码地址可以直接上我的GIT clone ...
- devexpress 给GridView添加行号
先找到 此时间gridView1_CustomDrawRowIndicator private void gridView1_CustomDrawRowIndicator(object sender, ...
- 系统学习 Java IO (三)----文件类 File
目录:系统学习 Java IO---- 目录,概览 Java IO API 中的 File 类可以访问基础文件系统. 使用 File 类,可以: 检查文件或目录是否存在. 如果目录不存在,创建一个目录 ...
- nginx之gzip压缩
nginx的gizp压缩 为了使网站节省带宽和加快访问速度,在服务器方面的一个优化的就是使用nginx提供的gzip压缩. 一.使用压缩原理: 1.当用户使用浏览器访问网站时,就是在发送一个http请 ...
- 秒懂Hash算法(一):什么是Hash
Hash函数 在一般的线性表.树结构中,数据的存储位置是随机的,不像数组可以通过索引能一步查找到目标元素.为了能快速地在没有索引之类的结构中找到目标元素,需要为存储地址和值之间做一种映射关系h(key ...
- TCP/IP协议与OSI体系结构总结
什么是TCP/IP协议?TCP/IP协议不是一个简单的TCP和IP协议,而是个协议族的统称,是网络通信的一套协议集合. TCP/IP协议与OSI七层模型在模块分布上具有一定的区别,OSI参考模型通信协 ...
- 利用MAT分析JVM内存问题,从入门到精通(二)
上一篇文章MAT入门到精通(一)介绍了MAT的使用场景和基本概念,这篇文章开始介绍MAT的基本功能,后面还有两篇,一篇是MAT的高级功能,另一篇是MAT实战案例分析. 三.欢迎页 使用MAT打开一个h ...
- java-NIO-FileChannel(文件IO)
Java NIO中的FileChannel是一个连接到文件的通道.可以通过文件通道读写文件. FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下. 对于文件的复制,平时我们都是使用输入 ...
- 浅入深出Vue:子组件与数据传递
上一篇了解了组件的概念及在使用中需要注意的地方.在面对单个组件逻辑复杂需要拆分时,难免会遇到父子组件之间数据传递的问题.那么我们来了解一下在父子组件之间进行数据传递时需要遵循哪些约定,以及要注意哪些问 ...