主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

使用结构输出调用 MATLAB 函数

此示例说明如何打包处理数据并返回结构体数组的 MATLAB® 函数,并将其与用 C# 编写的 .NET 应用程序一起部署。

前提条件

  1. 创建一个对 MATLAB 搜索路径可见的新工作文件夹。此示例使用 C:\Work 作为新工作文件夹。

  2. 在 Windows® 和您计划运行 .NET 应用程序的其他平台上安装 MATLAB Runtime。有关详细信息,请参阅下载并安装 MATLAB Runtime

  3. 对于 Linux®macOS 平台,安装 MATLAB Runtime 后,您需要分别设置 LD_LIBRARY_PATHDYLD_LIBRARY_PATH 环境变量。有关详细信息,请参阅针对部署设置 MATLAB Runtime 路径

  4. 验证您是否已安装 .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 应用程序中

  1. 在 Windows 中打开命令提示符并导航到本示例中使用的 work 文件夹。

  2. 在命令行中,键入:

    dotnet new console --framework net6.0 --name ConsoleApp

    这会创建一个名为 ConsoleApp 的文件夹,其中包含以下内容:

    • obj 文件夹

    • ConsoleApp.csproj 工程文件

    • Program.cs C# 源文件

  3. 在文本编辑器中打开工程文件。

    <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>
  4. Program.cs C# 文件中的代码替换为以下代码:

     Program.cs

  5. 在命令行中,输入以下命令来构建您的工程:

    dotnet build ConsoleApp.csproj

运行 C# 应用程序

为了测试目的,您可以从 MATLAB 命令提示符运行该应用程序。这不需要 MATLAB Runtime。在 MATLAB 命令提示符下,导航到包含可执行文件的目录,然后输入以下内容运行您的应用程序:

!dotnet run
该应用程序显示幻方矩阵。
Executing 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 应用程序,则可以跳过此部分。

  1. 打开 Visual Studio 并创建一个名为 ConsoleApp 的 C# 控制台 App。有关详细信息,请参阅使用 Visual Studio 创建 .NET 控制台应用程序中的创建应用程序部分。

  2. 选择 .NET 6.0 (Long-term support) 作为框架。

  3. Program.cs 文件中默认生成的源代码替换为此示例页面中的 Program.cs 文件中提供的特定源代码。

  4. 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

  5. 构建应用程序。

另请参阅

| |

主题