主要内容

在单个应用程序中使用多个程序集

在开发使用多个MATLAB的应用程序时®.NET程序集,考虑在程序集之间无法共享以下内容:

  • MATLAB功能处理

  • matlab figure hackles.

  • Matlab对象

  • C,Java.®,和.NET对象

  • 存储在单元格阵列和结构中的可执行数据

合作马铃薯功能手柄

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.会抛出一个例外。

使用系统;使用mathworks.matlab.net.utility;使用mathworks.matlab.net.arrays;使用get_plot_handle;使用plot_xy;namespace mathworks.examples.plotapp {class plotcsapp {静态void main(String [] args){try {//为生成的函数创建对象get_plot_handle.class1绘图仪= new get_plot_handle.class1();plot_xy.class1 plot = new plot_xy.class1();mwarray h = plotter.get_plot_handle(' -  rs',(双)2,'k','g',(双)10);double [] x_data = {1,2,3,4,5,6,7,8,9};Double [] Y_DATA = {2,6,12,20,30,42,56,72,90}; MWArray x = new MWArray(x_data); MWArray y = new MWArray(y_data); plot.plot_xy(x, y, h); } catch(Exception exception) { Console.WriteLine("Error: {0}", exception); } } } }

处理情况的正确方法是将两个函数编译成一个组件。

使用系统;使用mathworks.matlab.net.utility;使用mathworks.matlab.net.arrays;使用plot_functions;命名空间mathworks.examples.plotapp {class plotcsapp {静态void main(String [] args){try {//为生成的函数创建对象class1 plot = new class1();mwarray h = plot.get_plot_handle(' -  rs',(双)2,'k','g',(双)10);double [] x_data = {1,2,3,4,5,6,7,8,9};Double [] Y_DATA = {2,6,12,20,30,42,56,72,90};mwarray x = new mwarray(x_data);mwarray y = new mwarray(y_data); plot.plot_xy(x, y, h); } catch(Exception exception) { Console.WriteLine("Error: {0}", exception); } } } }

与对象一起工作

MATLAB编译器SDK™使您可以从中返回以下类型的对象Matlab运行时到您的申请代码:

  • 马铃薯

  • C ++

  • 。网

  • java.

但是,您无法通过一个创建的对象Matlab运行时实例进入不同的Matlab运行时实例。当返回对象的函数和操作该对象被编译成不同的装配函数时,可能会发生这种冲突。

例如,您开发了两个功能。第一个基于某些条件为客户创建银行账户。二次转移两个账户之间的资金。

百分比作为帐户保存Classdef.帐户<句柄特性姓名结尾特性(setaccess =受保护)余额= 0数结尾方法功能obj =帐户(name)obj.name = name;obj.number =圆形(兰特* 1000);结尾功能存款(obj,存款)new_bal = obj.balance +存款;obj.balance = new_bal;结尾功能撤回(obj,撤销)new_bal = obj.balance  - 撤销;obj.balance = new_bal;结尾结尾结尾
%保存为open_acct .m功能acct = open_acct(名称,open_bal)acct =帐户(名称);如果Open_bal> 0 acct.deposit(open_bal);结尾结尾
%保存为Transform.m功能转移(来源,Dest,金额)如果(source.balance>金额)dest.deposit(金额);来源.Withdraw(金额);结尾结尾

如果你编译了open_acct.m.转移进入单独的组件,您无法使用与之创建的帐户进行资金open_acct.。呼吁转移抛出一个例外。解决此方法的一种方法是将两个函数编译成一个组件。您还可以重新推荐应用程序,以便您不会将MATLAB对象传递给函数。