主要内容

生成 .NET 程序集并编译 .NET 应用程序

支持的平台:Windows®

此示例说明如何从 MATLAB® 函数创建 .NET 程序集,并将生成的程序集集成到 .NET 应用程序中。

前提条件

  • 验证您是否已满足所有 MATLAB Compiler SDK™ .NET 目标要求。有关详细信息,请参阅MATLAB Compiler SDK .NET 目标要求

  • 验证您是否已安装 Microsoft® Visual Studio®

  • 最终用户必须安装 MATLAB Runtime 才能运行应用程序。有关详细信息,请参阅下载并安装 MATLAB Runtime

    出于测试目的,您可以使用安装的 MATLAB 来代替 MATLAB Runtime

MATLAB 中创建函数

在 MATLAB 中,检查您想要打包的 MATLAB 代码。对于此示例,创建一个名为 makesquare.m 的 MATLAB 脚本。

function y = makesquare(x)
y = magic(x);

在 MATLAB 命令提示符下,输入 makesquare(5)

输出是一个 5×5 矩阵。

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

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

使用编程方法编译 .NET 程序集。或者,如果您想使用图形界面创建 .NET 程序集,请参阅使用 .NET 程序集编译器打包 MATLAB 函数

  1. 如果您尚未创建文件 makesquare.m,请复制位于 matlabroot\toolbox\dotnetbuilder\Examples\VS15\NET\MagicSquareExample\MagicSquareComp 的示例文件。

    copyfile(fullfile(matlabroot,'toolbox','dotnetbuilder','Examples',...
    'VS15','NET','MagicSquareExample','MagicSquareComp','makesquare.m'));
  2. 将以下代码保存在名为 makesquareSample1.m 的示例文件中:

    x = 5;
    y = makesquare(x);

  3. 使用 compiler.build.dotNETAssembly 函数编译 .NET 程序集。使用名称-值参量指定程序集名称、类名称和示例文件。

    buildResults = compiler.build.dotNETAssembly('makesquare.m',...
    'AssemblyName','MagicSquareComp',...
    'ClassName','MagicSquareClass',...
    'SampleGenerationFiles','makesquareSample1.m');

    您可以使用名称-值参量在 compiler.build 命令中指定其他选项。有关详细信息,请参阅 compiler.build.dotNETAssembly

    compiler.build.Results 对象 buildResults 包含有关编译类型、生成的文件、包含的支持包和编译选项的信息。

    该函数会在当前工作目录中名为 MagicSquareCompdotNETAssembly 的文件夹中生成以下文件:

    • samples\makesquareSample1.cs - C# .NET 示例文件。

    • GettingStarted.html - 包含从命令行编译 .NET 驱动应用程序的步骤的 HTML 文件。

    • includedSupportPackages.txt - 列出程序集中包含的所有支持文件的文本文件。

    • MagicSquareComp.dll - 可以使用 mwArray API 访问的动态链接库文件。

    • MagicSquareComp.xml - 包含 mwArray 程序集文档的 XML 文件。

    • MagicSquareComp_overview.html - 包含访问程序集和使用 mwArray 类层次结构生成参量的要求的 HTML 文件。

    • MagicSquareCompNative.dll - 可以使用原生 API 访问的动态链接库文件。

    • MagicSquareCompNative.xml - 包含原生程序集文档的 XML 文件。

    • MagicSquareCompVersion.cs - 包含版本信息的 C# 文件。

    • mccExcludedFiles.log - 包含应用程序中未包含的任何工具箱函数列表的日志文件。有关不支持的函数的信息,请参阅 MATLAB Compiler 限制

    • readme.txt - 包含打包和接口信息的文本文件。

    • requiredMCRProducts.txt - 包含 MATLAB Runtime 运行应用程序所需产品的产品 ID 的文本文件。

    • unresolvedSymbols.txt - 包含有关未解析符号的信息的文本文件。

    注意

    生成的程序集不包括 MATLAB Runtime 或安装程序。要使用 buildResults 对象创建安装程序,请参阅 compiler.package.installer

将 .NET 程序集集成到 .NET 应用程序中

创建 .NET 程序集后,您可以将其集成到任何 .NET 应用程序中。此示例使用在打包过程中生成的 C# 示例应用程序代码。您可以将此 .NET 示例应用程序代码用作指南来编写您自己的应用程序。

注意

要使用接受输入参量的更高级的应用程序调用程序集,请使用位于以下文件夹的相应子文件夹中的 C# 或 Visual Basic® 应用程序 MagicSquareApp

matlabroot\toolbox\dotnetbuilder\Examples\VS15\NET\MagicSquareExample\

  1. 打开 Microsoft Visual Studio 并创建一个名为 MainApp 的 C# Console App (.NET Framework)

  2. 如有必要,删除在工程中创建的任何源代码文件。

  3. samples 文件夹中生成的 C# 示例应用程序代码 makesquareSample1.cs 添加到工程中。

    程序列表如下所示。

    using System;
    using System.Collections.Generic;
    using System.Text;
    using MathWorks.MATLAB.NET.Arrays;
    using MathWorks.MATLAB.NET.Utility;
    using MagicSquareComp;
    
    /// <summary>
    /// Sample driver code that integrates a compiled MATLAB function
    /// generated by MATLAB Compiler SDK
    ///
    /// Refer to the MATLAB Compiler SDK documentation for more
    /// information.
    /// </summary>
    class makesquareSample1 {
        static MagicSquareClass MagicSquareClassInstance;
    
        static void Setup() {
            MagicSquareClassInstance = new MagicSquareClass();
        }
    
        /// <summary>
        /// Example of using the makesquare function.
        /// </summary>
        public static void makesquareSample() {
            double xInData = 5.0;
            MWNumericArray yOut = null;
            Object[] results = null;
            try {
                MWNumericArray xIn = new MWNumericArray(xInData);
                results = MagicSquareClassInstance.makesquare(1, xIn);
                if (results[0] is MWNumericArray) {
                    yOut = (MWNumericArray) results[0];
                }
                Console.WriteLine(yOut);
            } catch (Exception e) {
                Console.WriteLine(e);
            }
        }
    
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main(string[] args) {
            try {
                Setup();
            } catch (Exception e) {
                Console.WriteLine(e);
                Environment.Exit(1);
            }
            try {
                makesquareSample();
            } catch (Exception e) {
                Console.WriteLine(e);
                Environment.Exit(1);
            }
        }
    }

    程序执行以下操作:

    • 使用 try-catch 代码块处理异常

    • 创建一个 MWNumericArray 数组来存储输入数据

    • 实例化 MagicSquareClass 对象 results

    • 调用 makesquare 方法,其中第一个参数指定输出参量的数量,后续参数按顺序作为输入参量传递给函数

    • 将函数输出写入控制台

  4. 在 Visual Studio 中,添加对程序集文件 MagicSquareComp.dll 的引用,该文件位于生成或安装程序集的文件夹中。

  5. 添加对 MWArray API 的引用。

    如果您的系统上安装了 MATLABmatlabroot\toolbox\dotnetbuilder\bin\win64\<framework_version>\MWArray.dll
    如果您的系统上安装了 MATLAB Runtime<MATLAB_RUNTIME_INSTALL_DIR>\toolbox\dotnetbuilder\bin\win64\<framework_version>\MWArray.dll

  6. 转至 Build,然后转至 Configuration Manager,并将平台从 Any CPU 更改为 x64

  7. 添加完代码和引用后,使用 Visual Studio 编译应用程序。

    编译过程会生成一个名为 makesquareSample1.exe 的可执行文件。

  8. 从 Visual Studio、在命令行窗口中或通过双击生成的可执行文件来运行应用程序。

    应用程序会返回与 MATLAB 示例代码相同的输出。

        17    24     1     8    15
        23     5     7    14    16
         4     6    13    20    22
        10    12    19    21     3
        11    18    25     2     9

另请参阅

|

主题