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

Allowing user provided .m functions in a compiled Matlab GUI

我曾尝试阅读许多有关已编译 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 。那么我该如何解决呢?

谢谢,

山姆

从许可角度来看,这非常简单。 Mathworks 不允许部署此类代码,您可以轻松部署自己的命令行版本的 matlab,它运行任意代码并且不需要任何许可证。

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

替代方案: 如果部署 jar,JRE 已经是 运行。考虑使用 java 脚本,因为 JRE 已经带有脚本引擎。然后用户必须输入 java 脚本。