当开发应用程序使用多个MATLAB®共享库,考虑以下内容:
每个MATLAB共享库必须单独初始化。
每个MATLAB共享库必须分别终止。
MATLAB函数句柄不能在共享库之间共享。
SAMLAB图形句柄无法在共享库之间共享。
SAMLAB对象无法在共享库之间共享。
C、Java®,并且.NET对象无法在共享库之间共享。
存储在单元数组和结构中的可执行数据不能在共享库之间共享
初始化和终止多个共享库:
初始化Matlab运行时使用mclmcriinitialize()
.
调用应用程序中执行MATLAB代码的部分mclRunMain ()
.
在初始化共享库之前,使用初始化MATLAB应用程序状态mclinitializapplication()
.
对于每个MATLAB共享库,调用生成的初始化函数,图书馆
初始化()
.
添加使用MATLAB代码的代码。
对于每个MATLAB共享库,请使用生成的终端函数释放库使用的资源,图书馆
终止()
.
释放所使用的资源Matlab运行时通过调用mclterminateApplication()
.
此示例显示使用两个共享库。
MATLAB功能手柄可以在a之间来回传递Matlab运行时实例和应用程序。但是,它不能从一个人传递Matlab运行时实例到另一个。例如,假设您有两个MATLAB功能,get_plot_handle
和plot_xy
, 和plot_xy
使用由此创建的函数句柄get_plot_handle
.
%保存为get_plot_handle.m功能h = get_plot_handle(lnspec,lnwidth,mkedge,mkface,mksize)h = @draw_plot;功能draw_plot(x,y)plot(x,y,lnspec,...'行宽',lnwidth,...'markeredgecolor',mkedge,...'markerfacecolor',mkface,...'Markersize'mkSize)结尾结尾
%保存为plot_xy.m功能plot_xy(x,y,h)h(x,y);结尾
如果将它们打入两个单独的共享库,请呼叫plot_xy
将抛出异常。
处理这种情况的一种方法是将两个函数打包到一个共享库中。例如,如果您调用共享库plot_function.
,您的应用程序只需要一个呼叫来初始化函数,并且您可以通过功能句柄plot_xy
没有错误。
MATLAB编译器SDK™使您可以从中返回以下类型的对象Matlab运行时到您的申请代码:
马铃薯
C ++
net
Java
Python®
但是,您无法通过一个创建的对象Matlab运行时实例进入不同的Matlab运行时实例。当返回对象的函数和操作该对象的函数打包到不同的共享库时,可能会发生这种冲突。
例如,假设您开发了两个函数。第一种方法为客户创建一个银行帐户。第二种是在两个账户之间转账。
百分比作为帐户保存classdef帐户<句柄特性的名字结尾特性(SetAccess = protected) balance = 0 number结尾方法功能obj =帐户(name)obj.name = name;obj.number =圆形(兰特* 1000);结尾功能new_bal = obj. log (obj . log, obj. log);平衡+存款;obj。平衡= new_bal;结尾功能new_bal = obj. Withdraw (obj, Withdraw)平衡-采出量;obj。平衡= new_bal;结尾结尾结尾
%保存为open_acct .m功能acct = open_acct(名称,open_bal)acct =帐户(名称);如果Open_bal > 0 account .deposit(Open_bal);结尾结尾
%保存为Transform.m功能转移(来源,Dest,金额)如果(source.balance>金额)dest.deposit(金额);来源.Withdraw(金额);结尾结尾
如果你包装open_acct.m.
和transfer.m
在单独的共享库中,您不能使用创建的帐户转移资金open_acct
.呼吁转移
将抛出异常。解决这个问题的一种方法是将两个函数打包到一个共享库中。您还可以重构应用程序,以避免将MATLAB对象传递给函数。