在一个应用程序中使用多个共享库
开发使用多个MATLAB的应用程序时®考虑以下共享库:
每个MATLAB共享库必须单独初始化。
每个MATLAB共享库必须单独终止。
MATLAB函数句柄不能在共享库之间共享。
MATLAB图形句柄不能在共享库之间共享。
MATLAB对象不能在共享库之间共享。
C、Java®. net对象不能在共享库之间共享。
存储在单元格数组和结构中的可执行数据不能在共享库之间共享
初始化和终止多个共享库
初始化并终止多个共享库:
初始化MATLAB运行时使用
mclmcrInitialize ()
.调用执行MATLAB代码的应用程序的部分
mclRunMain ()
.在初始化共享库之前,使用初始化MATLAB应用程序状态
mclInitializeApplication ()
.对于每个MATLAB共享库,调用生成的初始化函数,
图书馆
初始化()
.添加与MATLAB代码一起工作的代码。
对于每个MATLAB共享库,使用生成的终止函数释放库使用的资源,
图书馆
终止()
.对象使用的资源释放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对象传递给函数。