生成 .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 函数。
如果您尚未创建文件
makesquare.m,请复制位于的示例文件。matlabroot\toolbox\dotnetbuilder\Examples\VS15\NET\MagicSquareExample\MagicSquareCompcopyfile(fullfile(matlabroot,'toolbox','dotnetbuilder','Examples',... 'VS15','NET','MagicSquareExample','MagicSquareComp','makesquare.m'));
将以下代码保存在名为
makesquareSample1.m的示例文件中:x = 5; y = makesquare(x);
使用
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- 可以使用mwArrayAPI 访问的动态链接库文件。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\
打开 Microsoft Visual Studio 并创建一个名为
MainApp的 C# Console App (.NET Framework)。如有必要,删除在工程中创建的任何源代码文件。
将
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方法,其中第一个参数指定输出参量的数量,后续参数按顺序作为输入参量传递给函数将函数输出写入控制台
在 Visual Studio 中,添加对程序集文件
MagicSquareComp.dll的引用,该文件位于生成或安装程序集的文件夹中。添加对
MWArrayAPI 的引用。如果您的系统上安装了 MATLAB matlabroot\toolbox\dotnetbuilder\bin\win64\<framework_version>\MWArray.dll如果您的系统上安装了 MATLAB Runtime <MATLAB_RUNTIME_INSTALL_DIR>\toolbox\dotnetbuilder\bin\win64\<framework_version>\MWArray.dll转至 Build,然后转至 Configuration Manager,并将平台从 Any CPU 更改为 x64。
添加完代码和引用后,使用 Visual Studio 编译应用程序。
编译过程会生成一个名为
makesquareSample1.exe的可执行文件。从 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
另请参阅
compiler.build.dotNETAssembly | mcc