Matlab发布C#调用的dll
编写Matlab程序
编写测试方法
AddMatlab中测试
Test调用deploytool工具,选择 .NET Assembly
deploytool添加文件Build中添加需要生成的方法
Package中添加MCR
若没有添加,编译后的dll无法使用,提示 dll 破损
Add
MCR
设置生成环境
VS项目中使用的Framework版本需与此一致
Framework
点击生成,成功后检查工作目录下生成的文件
BuildBuild
添加dll引用,调用测试。
安装目录\toolbox\dotnetbuilder\bin\win32\v2.0\MWArray.dll
工作目录\Demo\src\Demo.dll
Test
问题一:无法初始化
检查是否已安装MCR(运行时),并且安装时注意选择安装路径,不能有空格、中文。
检查是否配置好环境变量
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
运行结果:(仅Command Window,无其他界面)
window