Matlab发布C#调用的dll

编写Matlab程序

编写测试方法

《Matlab发布C#调用的dll》 Add

Matlab中测试

《Matlab发布C#调用的dll》 Test

调用deploytool工具,选择 .NET Assembly

《Matlab发布C#调用的dll》 deploytool

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

Package中添加MCR

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

《Matlab发布C#调用的dll》 Add

《Matlab发布C#调用的dll》 MCR

设置生成环境

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

《Matlab发布C#调用的dll》 Framework

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

《Matlab发布C#调用的dll》 Build

《Matlab发布C#调用的dll》 Build

添加dll引用,调用测试。

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

《Matlab发布C#调用的dll》 Test

问题一:无法初始化

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

《Matlab发布C#调用的dll》 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文件:

《Matlab发布C#调用的dll》 bat

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

《Matlab发布C#调用的dll》 window

    原文作者:过桥0811
    原文地址: https://www.jianshu.com/p/688f0b2dfb43
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞