c#调用matlab

配置运行坏境:matlabR2012a  VS2008

.m生成.dll文件也就是提供c#的动态链接库。

1.M程序生成DLL文件

         matlab命令行输入 deploytool出现一下窗口:

Name:文件名

Location:输入存入文件的路径

Type:选择文件可编译的类型

在这里我们选择.net assembly点击确定,出现如下窗口:

 

               

点击 actions出现一下窗口:

点击

这里要注意的是生成.frmework的版本,默认有时候会出错。选择shared.

Class1 为类名字(就是在C#程序中访问需要的类名,后面会遇到)

 Add files是你要编辑的.M文件,完成以后点击编译,出现以下窗口:

等待12分钟,编译完成。生成的DLL文件的路径在你安装matlab\bin目录下。还有急着和MCR坏境一起打包。

2C#调用.DLL                   

M程序如下图一个自加运算:

首先要引用MWArray(转换类型),其次.M生成的DLL文件。

 

   

例子指的输入一个值返回一个自加到3运算结果。

但是,在过程中遇到了一个麻烦的问题,就是C#在调用dll初始化matlab生成的类时,总是提示:typeInitialization exception类型初始化设定异常,网上找了好久,试了个各种解决方法,终于发现了原因:

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

程序的移植性问题

目前的测试情况在本机测试程序无误,可以正确运行。

1.分别拿到三台电脑上测试了一下,有三台机子系统分为:xp,win32,win64但是Matlab的都是2012 。说明只要安装相同版本的matlab操作系统影响就不是很大,不同版本的安装不兼容。

2.拿到三个没有安装M atlab的机子上,程序报错(MCR环境的设置文件存放目录如下:
\toolbox\compiler\deploy\win32);报错很正常因为没有安装MCR的环境,接下就遇到版本问题。在win764的机子上安装出现如下错误:

不知道和3P/PERL-WIN64有什么关联?是因为环境问题把,以前安装关于M程序的没有卸载完,所以出现上述的错误。Mcr没有安装成功,环境没有配置好,运行程序属于天方夜谭(以前装的M的相关程序没有卸载,所以造成MCR安装不成功)。安装MCR已成功,在注册regsvr32 mwcomutil.dll这个的时候出现。。mwcomutil.dll已加载。但是找不到入口点。。问题待解决(关机重启就可以了)

还有一个问题引用的.COM组件引用过去之后,为什么会报错?(待解决)

 

 

贴出几种方法:

1.重新安装MCR,选择安装路径为C:\MCR (不含空格,中文)

2.确保环境变量正确 path后添加:C:\MCR\v713\runtime\win32

3.运行 -> regsvr32 mwcomutil.dll

4.重新build .dll文件,package中选择add MCR,setting中设置assembly type为shared,encryption keyfile设为空,再把新生成的dll文件拷贝到那台电脑,替换,重新引用。。

 

注:MCR(MCR,英文意思是MATLAB Components Runtime)的功能是提供MATLAB发布程序的运行底层支持,它打包了MATLAB运行所必需的支持全部库、组件,就像使用Visual Studio.net 发布的程序必须安装Frame框架一样(也就是相当于一个简化版的matlab)。
MCR为提供了一种简洁的方法,无。论dll、com和exe,只要安装了MCR,即可运行。MCRInstaller.exe(运行坏境)

如果看不到图片可以下载我的资源,文档。免费的。

也可以找我交流  523897080

你可能感兴趣的:(c#调用matlab)