MATLAB App Designer中可编译部署的evalin替代方案咨询
可行的替代方案(均支持MATLAB Compiler编译部署)
MATLAB 编译后的独立应用不存在交互式的base工作区,所有依赖evalin、assignin操作base工作区的代码都会直接失效,你可以改用以下几种显式数据传递方案替换原有逻辑:
- 方案1:修改启动函数返回结构化数据(最推荐)
把原有的func.start无返回逻辑改成带输出参数的形式,直接将所有GUI需要的变量封装到结构体、字典或者自定义类对象中返回,完全不需要中转base工作区:
原有的两行% 修改后的func.start代码 function appData = start() % 原有生成变量的逻辑不变 fx = xxx; % 把所有需要的变量打包进结构体 appData.fx = fx; appData.其他变量 = 其他变量值; endevalin代码可以直接替换为:% 直接调用启动函数拿所有数据 appData = func.start(); % 读取需要的变量 fx = appData.fx; - 方案2:用
setappdata/getappdata做跨模块数据传递
如果原有func.start改造成本很高,你可以用MATLAB内置的应用数据存储机制传递变量,这个机制完全支持编译部署:
先在func.start内部把生成的变量存入根对象的应用数据区:
App Designer侧不需要碰base工作区,直接读取应用数据即可:% func.start内部新增逻辑 setappdata(0, 'fx', fx); setappdata(0, '其他变量名', 其他变量值);fx = getappdata(0, 'fx'); - 方案3:用类静态属性做持久化存储
如果func本身是类,你可以给类加静态属性作为共享存储区,读写逻辑都支持编译:
App侧直接读取静态属性即可:% func类定义新增静态属性 classdef func properties (Static) storage end methods (Static) function start() % 原有逻辑不变,生成fx后存到静态属性 func.storage.fx = fx; end end endfx = func.storage.fx;
内容的提问来源于stack exchange,提问作者TSP
相关产品推荐
相关产品推荐

