Matlab发布C#调用的dll

编写Matlab程序

编写测试方法

Add
Add

Matlab中测试

Test
Test

调用deploytool工具,选择 .NET Assembly

deploytool
deploytool

添加文件Build中添加需要生成的方法

Package中添加MCR

若没有添加,编译后的dll无法使用,提示 dll 破损


Add
Add

MCR
MCR

设置生成环境

VS项目中使用的Framework版本需与此一致


Framework
Framework

点击生成,成功后检查工作目录下生成的文件

Build
Build

Build
Build

添加dll引用,调用测试。

安装目录\toolbox\dotnetbuilder\bin\win32\v2.0\MWArray.dll
工作目录\Demo\src\Demo.dll


Test
Test

问题一:无法初始化

检查是否已安装MCR(运行时),并且安装时注意选择安装路径,不能有空格、中文。
检查是否配置好环境变量


Path
Path

问题二:无法调用神经网络工具箱

生成后直接调用,出现以下异常
编译异常Undefined function or method 'sim' for input arguments of type 'struct'.

通过帮助文档、google、论坛总结网上有两种解决方案,均未成功

方法一:找到工具箱中sim.m,将其打包到dll中
sim.m路径D:\MATLAB2010\toolbox\nnet\nnet@network\sim.m
添加后调用出现以下异常
feval Undefined function or method 'learngdm' for input arguments of type 'char'

方法二:在sim方法前添加net=network(net); 强制转换类型
添加后调用出现以下异常
No appropriate method, property, or field delays for class nnetWeight

尝试添加 net=network(net);后,再添加nnetWeight.m,根据异常信息不断添加系统方法,仍未成功。

后查找资料时发现因涉及核心模块,软件未开放调用神经网络工具箱方法。
http://www.ilovematlab.cn/thread-103075-1-1.html

命令行调用 Matlab

因C#调用编译后的神经网络工具箱失败,考虑转换实现方式:
1.通过命名行调用Matlab,再将命令语句保存为可执行文件。
2.C#调用执行文件(.bat)。
命令语句如下:

matlab -nodesktop -nosplash -r Add(1,2)【安装版Matlab】
D:\MATLAB2010B\bin\win32\MATLAB.exe -nodesktop -nosplash -r Add(1,2)【绿色版Matlab,需要完整启动程序路径】

注释:myadd 为添加方法,需要两个参数。
bat文件:


bat
bat

运行结果:(仅Command Window,无其他界面)


window
window
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容