罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

罗兰在MATLAB的艺术已经存档,不会被更新。

管理Non-Deployable函数在编译应用程序

客人的博客彼得•韦伯提出了关于构建应用程序的另一篇文章MATLAB编译器。本周的主题:理解函数的类型不能部署和管理那些行为不同
当部署。

介绍编写部署代码,请参阅6月19日文章

内容

你打算当你编写一个应用程序部署与MATLAB编译器,你需要意识到MATLAB的一个子集
函数不能部署或部署时表现不同。

有两类non-deployable函数:函数不授权部署;和功能的
部署运行时(MATLAB共同运行时或者MCR)不能支持。金宝app

排除功能:设计时间函数和gui

MATLAB编译器和建筑商的目的是创建一个健壮的应用程序和可预测的行为。在一定程度上,这
意味着部署的应用程序的用户不能修改它。防止用户修改部署
应用程序有几个好处:

  • 可预测性能和结果:应用程序总是工作部署的时候一样。
  • 更容易支持:支持组织金宝app没有应对user-introduced bug。
  • 知识产权保护:让不可读的代码(不可修改),因此,意味着用户无法复制算法。
  • 增加安全:一个应用程序分布在二进制,加密的形式比一个防伪的来源
    代码是可用的。

防止修改部署的应用程序,编译器只包含那些M-files应用程序实际使用,
加密M-files(这也保护它们包含的知识产权),创造了墨西哥人的授权文件,和截断
MATLAB的道路。但M-files编辑和修改MATLAB路径并不是唯一的方式改变一个MATLAB应用程序。某些
MATLAB工具箱函数可以自己改变应用程序的行为。例如,MATLAB调试器可以交互式地
修改变量的内容和变化的顺序翻译电话功能。同样,图属性
编辑器可以修改图调弦。编译器可以防止这些类型的修改通过拒绝编译功能
执行;这些函数是被排除在外从生成的清洁技术基金档案。

一般编译器不包括这些功能时使用发展中一个应用程序。大多数的这些设计时功能可分为两类:那些允许应用程序来改变它的工作方式,喜欢dbstoppropedit;和那些本身完整的小应用,imtool指南。这包括,但不限于:

  • 所有类型的调试功能。
  • 大部分的工具箱函数结束工具,如imtoolsptool
  • 函数生成或编辑m直接或间接;这包括,例如,深度学习工具箱网络培训等功能火车

许多这些限制没有处理:调试函数和函数生成m不能被部署。
没有解决方法的调试功能,因为它们内置命令没有有效的方法调试MATLAB
使用M-files代码。函数产生m不会在已部署的应用程序,因为他们没有工作的加密方式
生成的m, MCR要求。当然,您可以编写自己的代码来弥补其他类型的排除在外
函数,但请记住,克隆MATLAB或工具箱函数违反许可协议,我们不鼓励。

编译器创建一个排除列表函数在输出目录中。这个列表,mccExcludedFiles.log,这通常是很长,包含完整路径的M-files编译器产生的从列表中删除depfun和一个简短的解释为什么每个函数不能部署。

我们发表了一可部署的功能列表;这个列表可能会改变每个版本的MATLAB和可部署的工具箱。

不支金宝app持的功能:不同的执行环境

某些MATLAB函数无法部署,因为他们行动的对象并不存在于已部署的应用程序。为
因为部署的应用程序没有命令窗口,功能修改命令窗口不能被部署。

已部署的应用程序中使用这些函数会导致mlint在MATLAB编辑器和运行时警告警告在已部署的应用程序。例如,调用帮助部署时生成这个文本:

警告:帮助函数不能用于编译应用程序。

你可以防止您的部署的应用程序显示警告这样的通过isdeployed函数。更多细节,请参见前面的博客关于路径管理部署的应用程序。

目前有四个non-deployable MATLAB函数:

  • 帮助:部署的应用程序通常不包括MATLAB工具箱帮助文件,所以不需要帮助函数。
  • helpwin:helpwin显示帮助文本在一个新窗口;就像帮助部署的应用程序中使用的很少,因为部署的应用程序不包含MATLAB的帮助文件。
  • 键盘:由于部署组件可能是一个图形应用程序的一部分没有键盘输入流,MATLAB编译器
    不是不支持部署金宝app键盘函数。
  • savepath:一个已部署的应用程序的路径是固定不变的,这意味着没有必要保存路径。

这些函数的版本发出警告覆盖版本在MATLAB,因为它们的位置工具箱/编译器/部署总是最先出现在使用的路径世纪挑战集团depfun

函数的工作不同

在MATLAB和部署环境之间的差异不是不可逾越的,MATLAB编译器和建造者
工具提供版本的MATLAB函数被修改在部署的应用程序工作。

八个重要的MATLAB函数工作部署的应用程序以不同的方式:

  • clc:在MATLAB中,clc清除命令窗口。由于部署的应用程序不显示一个命令窗口,clc清除的外壳或DOS窗口应用程序就开始了。
  • 打开外部文件:在已部署的应用程序,打开外部文件查找指定的文件打开周大福存档之前寻找它在当前目录。这意味着
    打开外部文件将优先开放文件附带的应用程序,即使有一个具有相同名称的文件在当前目录。
    注意,而是文件包含在周大福档案通常是什么你想要部署打开外部文件要做的事情。请不要尝试使用完整路径来解决这种行为时可能会产生更多的问题
    应用程序部署。为更多的细节,为什么看到前面博客在本系列中。
  • :在MATLAB中,返回提示命令窗口的左上角。在已部署的应用程序,它将促使左上角
    的外壳或DOS窗口应用程序开始。不像clc,不清楚现有的文本窗口。
  • 输入:版本的部署输入读取从壳或DOS命令窗口而不是MATLAB命令窗口。如果没有可用的命令窗口,
    输入将挂起或失败。
  • loadlibrary的版本:loadlibrary运营在c风格的头在部署的应用程序接口不可用;但是编译器支持金宝apploadlibrary与m文件原型。
  • 暂停:就像输入,暂停(没有一个超时参数)读取从壳或DOS命令窗口在一个已部署的应用程序。如果没有这样的窗口
    暂停将暂停,直到永远。
  • 打印:一个完整的会计之间的差异印刷在已部署的应用程序和在MATLAB超出了范围
    这篇博文。而你仍然可以使用打印从你的数据生成位图或jpeg,硬拷贝你必须使用deployprint代替。例如:
如果isdeployed deployprint其他打印结束
  • printdlg:部署的应用程序只支持单一参数版本的金宝appprintdlg,也就是说,printdlg(图)

你会发现特定于部署的版本的这些函数的代码工具箱/编译器/部署。你可以控制,如果在部署的应用程序使用这些函数被调用isdeployed函数。在不太可能的情况下,您需要更改这些函数是如何工作的,你可以过载他们通过创建一个函数
同名的顶级应用程序目录。编译器将生成的应用程序,这样的道路
你的m文件被调用,而不是一个工具箱/编译器/部署

最后,请注意功能部署为一个独立的可执行文件的主例程可能需要处理的输入
部署时参数不同。在做一个独立的可执行文件从MATLAB函数,参数
MATLAB编译器生成的代码将任何用户提供的命令行参数传递给编制MATLAB函数。然而,
命令行参数传递到MATLAB函数作为字符串,即使他们是数字。因此,任何辅助功能
作为编制MATLAB程序的入口点应该期望(或至少测试)的字符串输入。例如:

函数y = addten (x)如果isstr (x) x = str2num (x);结束
y = x + 10;

部署您的应用程序

部署您的应用程序是很容易的,你遵循这些指导方针:

  • 使用isdeployed保护non-deployable代码被部署的应用程序。
  • 记住,一个已部署的应用程序没有MATLAB命令窗口(或任何其他的桌面工具,如编辑器)。
  • 不改变或依赖于当前目录的路径;灵活的部署的应用程序应该是小于MATLAB
    应用程序(这使得它们更安全,更容易支持)。金宝app

在这个系列的帖子的大部分信息最终将MATLAB编译器的文档。请
评论任何你感到还不清楚,问任何问题你想回答。随时联系我如果
你有其他的疑问MATLAB编译器或建筑商或你的想法在这里

使用MATLAB®7.6发表


评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。