メインコンテンツ

厳密に型指定された MATLAB 関数からの C# コードの作成

R2026b

この例では、厳密に型指定された MATLAB® 関数から C# (.cs) ファイルを作成し、それをサンプル C# アプリケーション コードと統合する方法を説明します。

MATLAB での関数の作成

次のコードを使用して、厳密に型指定された MATLAB 関数を stronglyTypedFactorial.m という名前のファイルに作成します。

function fact = stronglyTypedFactorial(n)
arguments
    n (1,1) uint64 {mustBeReal, mustBeLessThan(n,22)}
end
fact = 1;
for i = 1:n
    fact = fact*i;
end
end

MATLAB コマンド プロンプトで関数をテストします。

stronglyTypedFactorial(5)
ans =
  uint64
   120

C# コードの生成

C# (.cs) ファイルを生成します。

matlab.engine.typedinterface.generateCSharp("FactApp",Functions="stronglyTypedFactorial")
0 class(es) and 1 function(s) written to FactApp

この関数は、フォルダー FactApp 内に stronglyTypedFactorial.cs ファイルを作成します。このコードは、MATLABFunctions という名前の C# クラスを定義します。このクラスには、UInt64 型の引数 n を指定して MATLAB stronglyTypedFactorial 関数を呼び出す関数が含まれています。

インターフェイスで、入力が mustBeReal 引数を満たすことが確認されます。実行時に、MATLAB stronglyTypedFactorial 関数は入力が mustBeLessThan(n,22) 引数を満たすことを確認します。詳細については、.NET と厳密に型指定された MATLAB コード間のデータ型マッピングを参照してください。

/* File: stronglyTypedFactorial.cs
*
* MATLAB Strongly Typed Interface Version: R2023b
* C# source code generated on: 23-May-2023
*/
using System;
using MathWorks.MATLAB.Types;
using MathWorks.MATLAB.Exceptions;

public static partial class MATLABFunctions { 
    public static void stronglyTypedFactorial(MATLABProvider _matlab, UInt64 n){
        dynamic _dynMatlab = _matlab;
        _dynMatlab.stronglyTypedFactorial(new RunOptions(nargout:0),n);
    }
    public static void stronglyTypedFactorial(MATLABProvider _matlab, UInt64 n,  out dynamic fact){
        dynamic _dynMatlab = _matlab;
        fact = (MATLABArray)_dynMatlab.stronglyTypedFactorial(new RunOptions(nargout:1),n);
    }
}

MATLAB が生成した C# コードと C# アプリケーションの統合

次のコードを使用して、Program.cs という名前の C# アプリケーション ファイルを作成します。

// *******************************************************************************
//
// This example demonstrates how to use a MATLAB .NET Assembly to build a simple 
// component displaying the results of the stronglyTypedFactorial function.
//
// *******************************************************************************

using MathWorks.MATLAB.Engine;
using MathWorks.MATLAB.Types;
using MathWorks.MATLAB.Exceptions;
using System;

namespace MathWorks.MATLAB.Engine.ConsoleExamples 
{
    public class Program
    {
        // The main entry point for the application
        static void Main()
        {
            Console.WriteLine("Starting MATLAB...");

            using (dynamic matlab = MATLABEngine.StartMATLAB()) {
                Console.WriteLine("done.");
                Console.WriteLine();
                UInt64 N = 5;
                MATLABFunctions.stronglyTypedFactorial(matlab, N, out dynamic results);
                RunOptions opts = new RunOptions() { Nargout = 0 };
                matlab.disp(opts, results);
            }
        }
    }
}

C# アプリケーションをコンパイルしてリンクします。詳細については、.NET エンジン プログラムのビルド要件を参照してください。

ランタイム ライブラリのパスを設定します。

  • Windows® コマンド プロセッサ:

    set PATH=matlabroot\extern\bin\win64;%PATH%
  • Linux®:

    LD_LIBRARY_PATH=matlabroot/extern/bin/glnxa64:LD_LIBRARY_PATH
    export LD_LIBRARY_PATH
  • macOS:

    DYLD_LIBRARY_PATH=matlabroot/extern/bin/maca64:matlabroot/sys/os/maca64
    export DYLD_LIBRARY_PATH

アプリケーションを実行します。

factApp.exe
Factorial of 5 is 120

参考

| |

トピック