您的位置:首页 > 编程语言 > MATLAB

小记Matlab与C#混合编程

2012-08-12 12:04 218 查看
最近的项目用到了matlab,但是由于考虑到要与其他的项目合成,所以不能直接用matlab,所以就想到了能不能把matlab写成的函数编译成一个dll,供C#调用,所以网上查了点资料研究了一下matlab与C#的混合编程,记录一下:

首先在matlab中写好你自己实现的函数,例如假设 function result = myTest (paramA, paramB),把你的.m文件编写完以后,在matlab控制台里输入deploytool,弹出配置窗口,选择.net component,新建一个myTest.prj,然后把你的.m文件拖进去,点击build,则可以生成最后的dll

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

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

但是,我把程序移植到了另一台电脑上,那台电脑没有安装matlab,但是我安装了matlab compilor runtime,运行程序时,发现又产生了类型初始化设定异常,郁闷啊。继续在网上寻找解决方案,试了各种方法,最后终于搞定了,但是不知道最后具体是那个解决方案发挥了作用,所以把所有试过的方法都贴一下:

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文件拷贝到那台电脑,替换,重新引用

5. 重启 or 重启VS?

经过上述步骤,发现程序运行正确,但是最后到底是哪个步骤有用,就不清楚了:)

其实这个以前也搞过,估计也是碰到类似的问题,搞了好久,现在隔了一段时间,又忘记之前的教训和经验了,结果又花了很久的时间网上找资料,所以现在记录一下,免得以后再碰到,浪费时间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: