允许用户在编译的Matlab GUI中提供.m函数

时间:2015-01-19 10:18:07

标签: matlab user-interface compiler-errors

我已经尝试在编译的Matlab GUI上阅读许多文档(尤其是http://blogs.mathworks.com/loren/2008/08/11/path-management-in-deployed-applications/,其中提出了问题但没有回答),但无法找到我的问题的答案。

我想在Matlab中创建一个已编译的GUI(使用deploytool编译,并且可以在没有Matlab的计算机上运行),在某些时候,用户可以指定自己的matlab .m文件(例如: myProfile.m)和Gui稍后使用它(最后一点是棘手的部分)。

myProfile.m是一个简单的函数(它需要一个参数并输出一个值),它可以位于用户想要的任何位置,并且完全由用户定义。我在这里举一个简单的例子:

function [y] = myProfile(x)
    y = x^2;
end

但它可能更复杂。

在Gui中,我向用户询问他的个人资料功能的路径,并尝试将其设为功能句柄:

Button1 = uicontrol('String','Browse path to your Profile',...
        'Position',[320 10 150 150],...
        'Callback',@button1_Callback);
function [profileFunc] = button1_Callback(varargin)
      [ProfileName,ProfilePath] = uigetfile({'*.m'},'Select your profile'); 
      addpath(ProfilePath);
      profileFunc = str2func(strcat('@',ProfileName));
      % profileFunc will be used later on in the code
end

当然,编译后这段代码不起作用,我收到以下错误:

 'C:\Users\...\myProfile.m' is not in the application's expanded CTF archives at 
 'C:\Users\...\mcrCache8.0\myGui'. This is typically caused by calls to ADDPATH ...

我知道在编译Gui时在Gui中使用addpath不起作用。但是如果我不添加路径,程序就找不到用户提供的myProfile.m。那我怎么解决这个问题呢?

谢谢,

萨姆

1 个答案:

答案 0 :(得分:1)

从许可点查看时非常简单。 Mathworks不允许部署此类代码,您可以轻松部署自己的命令行版本的matlab,该版本运行仲裁代码并且不需要任何许可证。

在我看来,只有一种方法:部署m代码并要求用户安装matlab或octave。

替代: 如果部署jar,则JRE已在运行。使用java脚本作为JRE的Concider已经带来了脚本引擎。然后用户必须输入java脚本。