使用结构输出调用 MATLAB 函数
此示例说明如何打包处理数据并返回结构体数组的 MATLAB® 函数,并将其与用 C# 编写的 .NET 应用程序一起部署。
前提条件
创建一个对 MATLAB 搜索路径可见的新工作文件夹。此示例使用
C:\Work作为新工作文件夹。在 Windows® 和您计划运行 .NET 应用程序的其他平台上安装 MATLAB Runtime。有关详细信息,请参阅下载并安装 MATLAB Runtime。
对于 Linux® 和 macOS 平台,安装 MATLAB Runtime 后,您需要分别设置
LD_LIBRARY_PATH和DYLD_LIBRARY_PATH环境变量。有关详细信息,请参阅针对部署设置 MATLAB Runtime 路径。验证您是否已安装 .NET 6.0 SDK 或更高版本或 Microsoft® Visual Studio® 2022(v17.0 或更高版本)。您可以在系统命令提示符下输入
dotnet --info来验证 .NET 6.0 是否已安装。您可以从 https://dotnet.microsoft.com/download 下载特定于您的操作系统的 .NET SDK 版本。
创建 MATLAB 函数
使用以下代码创建一个名为 calculateStatistics.m 的 MATLAB 文件:
function [outputStruct, message] = calculateStatistics(data) % Calculate statistics outputStruct.mean = mean(data); outputStruct.median = median(data); outputStruct.stdDev = std(data); % Create a message string message = 'Statistics calculated successfully.'; end
在命令提示符下测试 MATLAB 函数。
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; [stats, msg] = calculateStatistics(data)
stats =
struct with fields:
mean: 5.5000
median: 5.5000
stdDev: 3.0277
msg =
'Statistics calculated successfully.'创建 .NET 程序集
使用 compiler.build.dotNETAssembly 函数创建一个 .NET 程序集。
buildResults = compiler.build.dotNETAssembly("calculateStatistics.m",... Interface="mwarray",... Verbose="on", ... AssemblyName="MATLAB.Compiler.SDKFunctions", ... ClassName="MATLABFunctions", ... OutputDir=".\output")
尽管通过 AssemblyName 属性提供程序集名称不是强制性的,但强烈建议这样做。这样做会为生成的 .NET 程序集带来更清晰的命名空间。如果没有它,名为 example 的根命名空间会自动追加到子命名空间,从而导致命名空间结构混乱且可能令人困惑。
该函数生成一套文件(如下所列),并将它们放在指定的输出目录中。
P:\MATLAB\WORK\OUTPUT
GettingStarted.html
includedSupportPackages.txt
MATLABFunctions.cs
MATLABFunctionsNative.cs
mccExcludedFiles.log
readme.txt
requiredMCRProducts.txt
SDKFunctions.dll
SDKFunctions.xml
SDKFunctionsNative.dll
SDKFunctionsNative.xml
SDKFunctionsVersion.cs
SDKFunctions_overview.html
unresolvedSymbols.txt
No subfolders exist将 MATLAB 代码集成到 .NET 应用程序中
在 Windows 中打开命令提示符并导航到本示例中使用的
work文件夹。在命令行中,键入:
dotnet new console --framework net6.0 --name ConsoleApp这会创建一个名为
ConsoleApp的文件夹,其中包含以下内容:obj文件夹ConsoleApp.csproj工程文件Program.csC# 源文件
在文本编辑器中打开工程文件。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> </PropertyGroup> </Project>使用
<ItemGroup>标记将以下引用添加到工程中:由
compiler.build.dotNETAssembly函数创建的SDKFunctions.dll.NET 程序集文件。MWArray.dll.NET 程序集文件依赖关系。如果您的系统上安装了 MATLAB matlabroot\toolbox\dotnetbuilder\bin\win64\netstandard2.0\MWArray.dll
如果您的系统上安装了 MATLAB Runtime <MATLAB_RUNTIME_INSTALL_DIR>\toolbox\dotnetbuilder\bin\win64\netstandard2.0\MWArray.dll
添加引用后,您的工程文件应类似于以下内容:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <Reference Include="SDKFunctions"> <HintPath>P:\MATLAB\work\output\SDKFunctions.dll</HintPath> <!--Path to .NET Assembly created by compiler.build.dotNETAssembly function--> </Reference> <Reference Include="MWArray"> <HintPath>C:\Program Files\MATLAB\R2025a\toolbox\dotnetbuilder\bin\win64\netstandard2.0\MWArray.dll</HintPath> <!--Path to MWArray.dll in the MATLAB--> </Reference> </ItemGroup> </Project>将
Program.csC# 文件中的代码替换为以下代码:在命令行中,输入以下命令来构建您的工程:
dotnet build ConsoleApp.csproj
运行 C# 应用程序
为了测试目的,您可以从 MATLAB 命令提示符运行该应用程序。这不需要 MATLAB Runtime。在 MATLAB 命令提示符下,导航到包含可执行文件的目录,然后输入以下内容运行您的应用程序:
!dotnet runExecuting MATLAB function to calculate statistics... Mean: 3 Median: 3 Standard Deviation: 1.5811388300841898 Message: Statistics calculated successfully.
使用 Visual Studio 进行集成
作为创建 .NET 应用程序的交互式命令行方法的替代方法,您可以使用 Microsoft Visual Studio 创建 .NET 应用程序。如果您已经按照上述说明创建了 .NET 应用程序,则可以跳过此部分。
打开 Visual Studio 并创建一个名为
ConsoleApp的 C# 控制台 App。有关详细信息,请参阅使用 Visual Studio 创建 .NET 控制台应用程序中的创建应用程序部分。选择
.NET 6.0 (Long-term support)作为框架。将
Program.cs文件中默认生成的源代码替换为此示例页面中的Program.cs文件中提供的特定源代码。在 Solution Explorer 中,右键点击工程名称,然后选择 Add > Project Reference。在 Reference Manager 窗口中,点击 Browse 并添加以下引用:
由
compiler.build.dotNETAssembly函数创建的SDKFunctions.dll.NET 程序集文件。MWArray.dll.NET 程序集文件依赖关系。如果您的系统上安装了 MATLAB matlabroot\toolbox\dotnetbuilder\bin\win64\netstandard2.0\MWArray.dll
如果您的系统上安装了 MATLAB Runtime <MATLAB_RUNTIME_INSTALL_DIR>\toolbox\dotnetbuilder\bin\win64\netstandard2.0\MWArray.dll
构建应用程序。
另请参阅
compiler.build.dotNETAssembly | compiler.build.DotNETAssemblyOptions | compiler.package.installer
