主要内容

实现类型安全接口和集成到. net应用程序中

这个例子展示了如何实现一个类型安全接口,并将其集成到. net应用程序。

类型安全接口允许您工作直接与熟悉的本地数据类型,而不是使用MWArrayAPI。添加一个类型安全接口net程序集创建一个额外的方法,接受和返回本地。net类型。

编写和测试你的MATLAB代码

创建您的MATLAB®程序,然后测试代码之前实现类型安全接口。MATLAB程序必须匹配的函数声明的母语。net接口。

对于这个示例,将下面的代码保存为multiply.m。函数返回输入的乘法xy

函数z =相乘(x, y) z = x * y;

测试函数在MATLAB命令提示符。

乘([1 4 7;2 5 8;3 6 9],[1 4 7;2 5 8;3 6 9])
ans 42 = 36 66 102 81 126 96 150

实现类型安全接口

MATLAB代码编写和测试后,开发. net c#或Visual Basic类型安全接口®。这个示例使用c#源代码提供接口。

  1. 开放微软®Visual Studio®并创建一个新类库(。净框架)项目命名IMultiply

  2. 在解决方案资源管理器窗口中,重命名Class1.cs文件IMultiply.cs。在该文件内,您写的源代码访问组件的类型安全接口。

    在这个例子中,IMultiply接口是用c#写的,指定三过载:

    使用系统;公共接口IMultiply{/ /标量乘法系统。乘(系统的两倍。双x,系统。双y);/ /向量乘以一个标量,返回一个向量系统。双[]相乘(系统。双x[],系统。双y);/ /系统矩阵乘法。双[,]相乘(系统。双[,]x,系统。双[,]y);}

    接口中的每个方法必须精确匹配一个部署MATLAB函数。

    有两个输入和一个输出(所有方法与MATLAB相匹配功能),但参数的数据类型不同。

  3. 构建然后配置管理器,改变的平台任何CPUx64

  4. 建设项目微软Visual Studio

    该文件IMultiply.dll在构建生成文件夹。

这个示例假设您的程序集仅包含IMultiply。实际上,更可能的是类型安全接口已经编译好的程序集的一部分。大会可以编译之前编写的MATLAB函数。

使用图书馆创建net程序集编译器应用程序

生成与. net程序集使用类型安全接口库的编译器应用。另外,如果你想创建一个. net汇编的MATLAB命令窗口使用编程方法,明白了使用compiler.build.dotNETAssembly创建net程序集

  1. 创建一个库编译器项目并选择net程序集类型列表。

  2. 指定以下值:

    价值
    库名称
    类名 算术
    文件编制 multiply.m

  3. 扩大额外的运行时设置部分。

  4. 类型安全的API部分,请执行以下操作:

    1. 选择使类型安全API

    2. 界面组装字段中,指定的位置类型安全接口组装IMultiply.dll你建造。

    3. 选择IMultiply接口的net的界面下拉框。

    4. 离开名称空间字段空白。

    5. 指定算术类的包装类字段。

  5. 单击按钮来构建项目。

创建net程序集使用compiler.build.dotNETAssembly

作为替代库的编译器应用程序,您可以使用编程方法生成类型安全接口使用以下步骤。如果您已经创建了一个装配使用库的编译器,请参阅net程序集集成到。net应用程序

  1. 构建. net程序集使用compiler.build.dotNETAssembly函数。使用名称-值参数来指定程序集名称和类名。

    compiler.build.dotNETAssembly (“multiply.m”,“AssemblyName”,“乘”,“名称”,“算术”);
  2. 导航到生成的MultiplydotNETAssembly文件夹中。

  3. 通过使用生成类型安全接口ntswrap从MATLAB命令:

    ntswrap (“c”,“Multiply.Arithmetic”,“——”,“IMultiply.dll”,“我”,“IMultiply”);

    并不是所有的参数都是互相兼容。看到ntswrap有关所有的命令选项。

    提示

    如果IMultiply.dll大会不是在当前文件夹,指定完整路径。

    这个命令生成装配ArithmeticIMultiply.dll包含的类型安全的APIMATLAB编译器SDK™算术的命名空间MultiplyNative

net程序集集成到。net应用程序

创建您的. net汇编后,您可以将其集成到任何。net应用程序。您可以使用这个例子。net应用程序代码作为指导编写自己的. net应用程序。

编译使用。net程序微软Visual Studio通过以下步骤:

  1. 开放微软Visual Studio并创建一个c#控制台应用程序(。净框架)被称为MultiplyApp

  2. 将以下代码复制到生成的Program.cs在你的项目:

    使用系统;使用System.Collections.Generic;使用来;使用text;名称空间MultiplyApp{类程序{代表字符串VectorToString < T > (IEnumerable < T > v);委托IEnumerable <字符串> MatrixToString < T > (T [,] m);静态void Main (string [] args){控制台。WriteLine (“\ nStarting应用…\ n”);/ /创建一个实例的类型安全API IMultiply m =新ArithmeticIMultiply ();/ /标量乘法双x = 17, y = 3.14159;双z = m。乘(x, y); System.Console.WriteLine("{0} * {1} = {2}\n", x, y, z); // Vector times scalar double[] v = new double[] { 2.5, 81, 64 }; double s = 11; double[] d = m.multiply(v, s); VectorToString vec2str = (vec => vec.Select(n => n.ToString()).Aggregate((str, next) => str + " " + next)); System.Console.WriteLine("[ {0} ] * {1} = [ {2} ]\n", vec2str(v), s, vec2str(d)); // Matrix multiplication double[,] magic = new double[,]{ // 3x3 magic square { 8, 1, 6 }, { 3, 5, 7 }, { 4, 9, 2 } }; double[,] squareSquared = m.multiply(magic, magic); MatrixToString mat2str = mat => mat.EnumerateRows().Select(r => vec2str(r)); PrintParallel(mat2str(magic), " * ".Select(c => c.ToString()), mat2str(magic), " = ".Select(c => c.ToString()), mat2str(squareSquared)); Console.WriteLine("\nClosing application..."); } public static void PrintParallel(params IEnumerable[] sources) { int max = sources.Select(s => s.Count()).Max(); for (int i = 0; i < max; i++) { foreach (var src in sources) System.Console.Write("{0} ", src.ElementAt(i)); System.Console.WriteLine(); } } } public static class ArrayExtensions { public static IEnumerable> EnumerateRows(this Array a) { return Enumerable.Range(0, a.GetLength(1)).Select(row => a.ToIEnumerable().Skip(row * a.GetLength(0)).Take(a.GetLength(0))); } public static IEnumerable ToIEnumerable(this Array a) { foreach (var item in a) yield return (T)item; } } }
  3. 在项目中添加引用下面的文件。

    这个引用: 定义:
    IMultiply.dll . net原生类型界面组装IMultiply
    ArithmeticIMultiply.dll 生成的类型安全的API
    MultiplyNative.dll 生成的. net汇编

    请注意

    不像其他。net部署场景,您不需要参考MWArray.dll在服务器程序源代码。的MWArray数据类型是类型安全的API背后隐藏着的ArithmeticIMultiply

  4. 构建然后配置管理器,改变的平台任何CPUx64

  5. 编译并运行这个程序微软Visual Studio

    程序显示以下输出:

    启动应用程序…17 * 3.14159 = 53.40703(2.5 81 64)* 11 =[27.5 891 704]8 1 6 8 1 6 91 67 67 3 5 7 * 3 5 7 = 67 91 67 4 9 2 4 9 2 67 67 91关闭应用程序…

提示

  • 在MATLAB函数声明输出出现在输入。例如,在函数,输出z出现在输入xy。这个订单不需要。net接口功能。输入之前或之后可能会出现输出,或两个可能是混合在一起。

  • MATLAB编译器SDK匹配。net接口函数公共MATLAB函数通过函数名和参数计算。在例子,. net接口函数和MATLAB函数必须命名,函数必须有相同数量的参数定义。

  • 输入和输出参数的数量和相对顺序是至关重要的。

    • 在评估参数的顺序,只有像参数(输入或输出)的顺序是,不管他们在哪里出现在参数列表中。

    • 一个函数的输入接口可能少于其相应的MATLAB函数,而不是更多。

  • 参数映射发生根据参数顺序而不是参数名称。

  • 函数返回值,如果指定了,算是第一个输出。

  • 你必须使用对多个输出参数。

    • 交替,裁判参数可用于,因为裁判是同义的。

  • MATLAB不支持重载函数。万博1manbetx因此,所有用户提供的函数的过载与给定的名称映射到生成的一个函数MATLAB编译器SDK

看到MATLAB类型。net类型完整的指导方针管理数据转换与类型安全接口。

另请参阅

|

相关的话题