打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Matlab混合编程之NET组件(C#篇)

 另一种混合编程方式——NET组件,利用m文件生成dll再由C#调用。.NET组件较之引擎的优点是可移植型较好,目标机不需要安装Matlab,只需要安装MCRinstaller.exedll的注册,缺点是配置较为复杂,受各种版本的影响。遇到一大圈的问题,最可能的原因是VS2013版本比较新,但最后还是一个个问题克服,正所谓,柳暗花明又一村。

配置环境:vs2013(64位)+Matlab2013a(64位)+win8.1(64位)
   以Matlab安装路径:C:\Program Files\MATLAB\R2013a为例

 

1.定义Matlab文件,myplus.m

function [s]  =myplus( n )

% calculate the sum of 1..n

s = 0;

for i = 1:n

   s = s + i;

end

2.Matlab编译器设置

command window中配置分别配置>>mbuildsetup>>mexsetup.

编译器均选择 VS2013

问题:matlab在关联编译器的时候,会出现找不到编译器的问题

原因:matlab要找windowssdkmt.exe,找不到报错的.因为vs2013在安装时,windowssdkmt.exe位置变了,而matlab还是按照老的路径找,肯定找不到(原来在windowssdks下面,现在在windowskits下面).

解决:网上找到相应文件,将mbuildoptsmexopts两个文件夹复制到(matlabroot)\bin\win64 下,(matlabroot)matlab的安装目录

command window>>deploytool。先创建project,选择.NETAssembly类型;然后把myplus.m文件添加到project里面,然后点上面菜单条上的buildthe project




3.环境安装及dll注册

需要安装MCRinstaller.exe(本机则不需要),它所在的位置是:C:\ProgramFiles\MATLAB\R2013a\toolbox\compiler\deploy\win64

在路径C:\ProgramFiles\MATLAB\R2013a\bin\win64里,对mwcomutil.dll进行注册(这个dllmatlab下作的任何com组件都要用到的dll),下面我们在其他编译器下调用时就可以用了。regsvr32mwcomutil.dll

问题:提示错误为注册dll模块的原因(Error:DllRegisterServer in E:\Matlab2010b\bin\test\src\test_1_0.dllfailed

解决:点“开始”->Windows系统”->“命令提示符”右键“以管理员身份运行”,在cmd中输入regsvr32mwcomutil.dll 。这样应该就可以了。

4.dll引用

C:\ProgramFiles\MATLAB\R2013a\toolbox\dotnetbuilder\bin\win64\v2.0复制出MWArray.dlldebug目录下,从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(objectsenderEventArgs e)

       {

           Class1 myhello = new Class1();

           MWArray i = 3;

           MWArray result;

           result = myhello.myplus(i);

           label1.Text = result.ToString();

       }

问题:C#在调用dll初始化matlab生成的类时,总是提示:typeInitializationexception类型初始化设定异常,网上找了好久,试了个各种解决方法

解决:原来是在build dll时,选择的.m文件的所在路径不能包含中文/空格,我把.m文件直接移到了根目录下的某个不含空格和中文的文件夹下,然后把在这个文件夹下的.m文件拖到myTest.prj中,buildVS中重新引用生成的新的dll,发现程序正确。

 

问题:在整个过程中,运行程序还是会出现问题,Matlab不能工作,如图:



原因:.NET版本的问题,及调试的问题

解决:.NET设置成4.0及其以下,

同时,将调试中的启用Visual Studio 承载进程取消掉,如下图



最后的最后,终于有结果了!激动人心啊~



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#调用Matlab 生成的com组件,生成com 时错误的解决
Matlab生成Com组件,vb、vc等的调用! - flider的日志 - 网易博客
C#与Matlab混合编程_入门
matlab函数编译成dll供Cpp调用的方法
VS2008中C#调用Matlab生成的DLL文件
C# 调用 Matlab
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服