我有一个MATLAB项目,我使用MCC编译为了拥有一个可执行文件。
然后我想知道外部程序员是否有可能在.exe中执行他的一些.m文件,而无需重新编译整个项目。
重点是提供一个应用程序,其他开发人员可以添加他们的“插件”,用MATLAB编写。
我已经搜索了在编译的MATLAB应用程序中运行外部.m文件的方法(比如这个帖子:Running an .m file from a MATLAB-compiled function)但是它不符合我的目的,尽管它使用eval()工作正常。< / p>
但是这个eval()“技巧”是不够的,因为它不允许定义新的函数或类。 例如,我希望外部.m文件成为新类(继承自可执行文件中已编译的“接口”)。
有没有办法将.m文件动态加载到MATALB编译的可执行文件中? (即使它需要MATLAB许可证才能这样做)。
和/或是否有一些“未记录的MATLAB”引用了我可以进一步研究的这个特定主题?
此致
答案 0 :(得分:1)
如果您能够创建和分发可以执行任意.m文件的已编译应用程序,那么您的用户几乎可以做任何MATLAB可以做的事情,但是免费(即使这不是你的意图) )。
为他们提供这种能力(即使你想要一些更无辜和有用的东西)违反了MATLAB编译器的许可协议,并且MathWorks也实施了一些技术限制以使其难以实现。
您可能会发现某些技术限制的部分方法,但如果您让用户能够在插件中执行任意m代码,则您将违反许可。
(当然是IANAL)
答案 1 :(得分:0)
我认为唯一的方法是从编译的函数中执行一些系统调用,例如:
mFile2Launch='foo'; %%% or whatever input
system(['matlab -r "' mFile2Launch '"']);
或者您也可以使用更复杂的一行来确保一切正常:
system(['matlab -nodesktop -nosplash -nodisplay -r "try, ' mFile2Launch '; end; quit"'])