主要内容

在单个应用程序中使用多个共享库

当开发应用程序使用多个MATLAB®共享库,考虑以下内容:

  • 每个MATLAB共享库必须单独初始化。

  • 每个MATLAB共享库必须分别终止。

  • MATLAB函数句柄不能在共享库之间共享。

  • SAMLAB图形句柄无法在共享库之间共享。

  • SAMLAB对象无法在共享库之间共享。

  • C、Java®,并且.NET对象无法在共享库之间共享。

  • 存储在单元数组和结构中的可执行数据不能在共享库之间共享

初始化和终止多个共享库

初始化和终止多个共享库:

  1. 初始化Matlab运行时使用mclmcriinitialize()

  2. 调用应用程序中执行MATLAB代码的部分mclRunMain ()

  3. 在初始化共享库之前,使用初始化MATLAB应用程序状态mclinitializapplication()

  4. 对于每个MATLAB共享库,调用生成的初始化函数,图书馆初始化()

  5. 添加使用MATLAB代码的代码。

  6. 对于每个MATLAB共享库,请使用生成的终端函数释放库使用的资源,图书馆终止()

  7. 释放所使用的资源Matlab运行时通过调用mclterminateApplication()

此示例显示使用两个共享库。

驱动代码示例

一起工作马铃薯函数处理

MATLAB功能手柄可以在a之间来回传递Matlab运行时实例和应用程序。但是,它不能从一个人传递Matlab运行时实例到另一个。例如,假设您有两个MATLAB功能,get_plot_handleplot_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对象传递给函数。

相关话题