function in a GUI does not return the correct value after function's parameters have been modified outside of the GUI
2 views (last 30 days)
Hi all, I have a GUI with external functions that I call inside callbacks of the GUI.
% define_Params() and compute_function() are written outside of the GUI
function params = define_Params();
params.value = 3;
% compute from compute_function
function outputdata = compute_function(inputdata, params)
params = define_Params();
outputdata = algo(inputdata, params ) ;
In my GUI, I have two callbacks:
1. function compute_pushbutton_Callback(hObject, eventdata, handles) to launch my computation
function apply_to_selectedImages_pushbutton_Callback(hObject, eventdata, handles)
params = define_Params();
outputdata = compute_function(inputdata, params) ;
2. function loadParams_Callback(hObject, eventdata, handles) to load and hopefully to change the parameters for compute_function().
function loadParams_Callback(hObject, eventdata, handles)
% open define_Params(), this can be editable
fileattrib( [PathName, FileName],'+w' );
eval(['!"C:\Program Files (x86)\Notepad++\notepad++" ' PathName FileName])
which opens define_Params() in Notepad++. And then, I change manually the value of params.value to 10, say, so in that function define_Params() becomes:
function [params] = define_Params()
params.value = 10;
I save in Notepad++, and re-launch my compute_pushbutton_Callback():
but the value of params.value is still equal to 3. in params though I changed it to 10. Also, I noticed, that sometimes, it is working and sometimes not ...
Can someone have some explanation about this, please ? And when I use debug mode, though the value is 10, it is still 3 ???
Thank you very much.
Walter Roberson on 15 Dec 2017
"I have to use Notepad++ since my application will be used with machines without Matlab (standalone application compiled with Matlab Compiler)."
Once a .m file has been compiled by MATLAB Compiler, it is "locked in" to the compiled executable, and changes to it will be ignored. The only way to change the behaviour of a .m that is compiled into an executable is to recompile the executable.
It is a deliberate part of the design of MATLAB Compiler that external .m cannot be evaluated at run-time. MATLAB Compiler is only for "closed" applications that do something specific. If a modifiable .m could be executed at run-time then it would be easy for someone to write a program that just executed an external .m file, compile that, and distribute that, and the effect would be to distribute free MATLAB licenses.