主要内容

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

开发使用多个MATLAB的应用程序时®考虑以下共享库:

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

  • 每个MATLAB共享库必须单独终止。

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

  • MATLAB图形句柄不能在共享库之间共享。

  • MATLAB对象不能在共享库之间共享。

  • C、Java®. net对象不能在共享库之间共享。

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

初始化和终止多个共享库

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

  1. 初始化MATLAB运行时使用mclmcrInitialize ()

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

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

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

  5. 添加与MATLAB代码一起工作的代码。

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

  7. 对象使用的资源释放MATLAB运行时通过调用mclTerminateApplication ()

这个例子展示了两个共享库的使用。

驱动程序示例代码

一起工作MATLAB函数处理

一个MATLAB函数句柄可以在函数之间来回传递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_functions,您的应用程序只需要一次调用就可以初始化该函数,并且您可以传递for的函数句柄plot_xy没有错误。

驱动程序示例代码

使用对象

MATLAB编译SDK™对象中返回以下类型的对象MATLAB运行时到你的应用程序代码:

  • MATLAB

  • c++

  • net

  • Java

  • Python®

但是,不能传递在其中创建的对象MATLAB运行时实例转换为不同的MATLAB运行时实例。当返回对象的函数和操作该对象的函数被打包到不同的共享库中时,就会发生这种冲突。

例如,假设您开发了两个函数。第一个为客户创建一个银行帐户。第二个在两个账户之间转移资金。

%存为account.mclassdef帐户<句柄属性的名字结束属性(SetAccess = protected) balance = 0 number结束方法函数Obj =帐户(名称)Obj .name =名称;obj。数字=整数(兰特* 1000);结束函数存款(obj,存款)new_bal = obj。余额+存款;obj。Balance = new_bal;结束函数Withdraw (obj, Withdraw) new_bal = obj。余额-取款;obj。Balance = new_bal;结束结束结束
保存为open_acct .m函数Acct = open_acct(name, open_bal)如果Open_bal > account .deposit(Open_bal);结束结束
%保存为transfer.m函数转账(来源,dest,金额)如果(来源。存款(金额);source.withdraw(数量);结束结束

如果你打包open_acct.m而且transfer.m创建的帐户不能转移资金到单独的共享库open_acct.呼唤转移会抛出异常。解决这个问题的一种方法是将两个函数打包到一个共享库中。您还可以重构应用程序,以免将MATLAB对象传递给函数。

相关的话题