如何在MATLAB编译的应用程序中运行外部.m代码?

时间:2012-06-04 13:34:21

标签: matlab mcc

我有一个MATLAB项目,我使用MCC编译为了拥有一个可执行文件。

然后我想知道外部程序员是否有可能在.exe中执行他的一些.m文件,而无需重新编译整个项目。

重点是提供一个应用程序,其他开发人员可以添加他们的“插件”,用MATLAB编写。

我已经搜索了在编译的MATLAB应用程序中运行外部.m文件的方法(比如这个帖子:Running an .m file from a MATLAB-compiled function)但是它不符合我的目的,尽管它使用eval()工作正常。< / p>

但是这个eval()“技巧”是不够的,因为它不允许定义新的函数或类。 例如,我希望外部.m文件成为新类(继承自可执行文件中已编译的“接口”)。

有没有办法将.m文件动态加载到MATALB编译的可执行文件中? (即使它需要MATLAB许可证才能这样做)。

和/或是否有一些“未记录的MATLAB”引用了我可以进一步研究的这个特定主题?

此致

2 个答案:

答案 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"'])