主要内容

单个应用程序中多个程序集的限制

当开发应用程序使用多个MATLAB®.NET程序集,请考虑以下内容不能在程序集之间共享:

  • MATLAB函数处理

  • MATLAB图形句柄

  • MATLAB的对象

  • C、Java®和。net对象

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

一起工作MATLAB函数处理

MATLAB函数句柄可以在应用程序和MATLAB运行时它起源于的实例。然而,一个MATLAB函数句柄不能传递给MATLAB运行时实例,而不是起源于它的实例。例如,假设你有两个MATLAB函数,get_plot_handleplot_xy,plot_xy使用由创建的函数句柄get_plot_handle

get_plot_handle.m

plot_xy.m

如果将它们编译为两个共享库,则调用plot_xy将抛出异常。

使用制度;使用MathWorks.MATLAB.NET.Utility;使用MathWorks.MATLAB.NET.Array;使用get_plot_handle;使用plot_xy;命名空间MathWorks.Examples.PlotApp{class PlotCSApp{static void Main(string[]args){try{//Create objects for the generated functions get_plot_handle.Class1 plotter=new get_plot_handle.Class1();plot_xy.Class1 plot=new plot_xy.Class1();mwareh=plotter.get_plot_plot_handle{1,2,3,4,5,6,7,8,9};double[]y_data={2,6,12,20,30,42,56,72,90};MWArray x=新的MWArray(x_data);MWArray y=新的MWArray(y_data);plot.plot_xy(x,y,h)}catch(异常异常){Console.WriteLine(“错误:{0},异常);}}}}}

处理这种情况的正确方法是将这两个函数编译成一个程序集。

使用系统;使用MathWorks.MATLAB.NET.Utility;使用MathWorks.MATLAB.NET.Arrays;使用plot_functions;class PlotCSApp {static void Main(string[] args) {try{//为生成的函数创建对象Class1 plot= new Class1();MWArray h = plot。get_plot_handle('--rs', (double)2, 'k','g', (double)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运行时到您的应用程序代码:

  • MATLAB

  • c++

  • net

  • Java

但是,不能传递在其中创建的对象MATLAB运行时实例到一个不同的MATLAB运行时实例。当返回对象的函数和操作该对象的函数被编译到不同的程序集时,就会发生这种冲突。

例如,开发一个银行账户类和两个函数。第一种方法是根据一些条件为客户创建一个银行帐户。第二种是在两个账户之间转账。

帐户

open_acct打烊

transfer.m

如果你编译open_acct.mtransfer.m在单独的程序集中,无法使用创建的帐户转账open_acct.打电话给转移将抛出一个异常。

解决这个问题的一种方法是将这两个函数编译为一个程序集。您还可以重构应用程序,这样就不会将MATLAB对象传递给函数。