Main Content

.NET アプリケーションへの単純な MATLAB 関数の統合

メモ

MATLAB® Compiler SDK™ 製品の例は matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET にあります。ここで、VSVersion は、使用している Microsoft® Visual Studio® .NET のバージョンを示します。Visual Studio で以下のソリューションを開くことにより、すべての例についてプロジェクトを読み込むことができます。

matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\DotNetExamples.sln

単純なプロットの例では、MATLAB 関数を呼び出してプロットを表示する .NET アセンブリを作成する方法について説明します。MATLAB 関数を使用して構造体配列を変更する例については、電話帳を参照してください。

以下の例では、次の手順を実行して MATLAB 関数を .NET アプリケーションに統合します。

  • MATLAB Compiler SDK 製品を使用して、MATLAB 関数を .NET クラスのメソッドに変換し、.NET アセンブリでそのクラスをラップします。

  • .NET クラスをインスタンス化し、MWArray クラス ライブラリを使用してデータ変換を処理して、C# アプリケーションまたは Visual Basic® アプリケーションでコンポーネントにアクセスします。

  • Visual Studio .NET 開発環境を使用して、生成されたアプリケーションをビルドして実行します。

前提条件

  • MATLAB Compiler SDK の .NET ターゲット要件をすべて満たしていることを確認します。詳細については、MATLAB Compiler SDK の .NET ターゲットの要件を参照してください。

  • Microsoft Visual Studio がインストールされていることを確認します。

  • アプリケーションの実行には、エンド ユーザーによる MATLAB Runtime のインストールが必要です。詳細については、MATLAB Runtime のインストールと構成を参照してください。

    テスト目的で、MATLAB Runtime の代わりに MATLAB のインストールを使用することができます。

単純なプロットの作成

ファイル

MATLAB 関数の場所matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\PlotExample\PlotComp\drawgraph.m
C# コードの場所matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\PlotExample\PlotCSApp\PlotApp.cs
Visual Basic コードの場所matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\PlotExample\PlotVBApp\PlotApp.vb

手順

  1. MATLAB 製品に付属している以下のフォルダーを作業フォルダーにコピーします。

    matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\PlotExample

    MATLAB コマンド プロンプトで、作業フォルダー内の PlotExample\PlotComp サブフォルダーに移動します。

  2. PlotExample\PlotComp にある関数 drawgraph を確認します。

    function drawgraph(coords)
    plot(coords(1,:), coords(2,:));
    pause(5)
    MATLAB コマンド プロンプトでこの関数をテストします。

    x = 0:0.01:10;
    y = sin(x);
    z = [x;y];
    drawgraph(z)

    この関数により、正弦波を表示する Figure が出力されます。

  3. 次の情報を使用して、ライブラリ コンパイラ アプリまたは compiler.build.dotNETAssembly によって .NET コンポーネントをビルドします。

    フィールド
    ライブラリ名PlotComp
    クラス名Plotter
    コンパイルするファイルdrawgraph.m

    たとえば、compiler.build.dotNETAssembly を使用している場合は、以下を入力します。

    buildResults = compiler.build.dotNETAssembly('drawgraph.m', ...
    'AssemblyName','PlotComp', ...
    'ClassName','Plotter');

    詳細については、.NET アセンブリの生成と .NET アプリケーションのビルドの手順を参照してください。

  4. コンポーネントにアクセスするために C# または Visual Basic のどちらを使用するのかを決定します。

    • C#

      C# を使用する場合は、コンポーネントにアクセスする C# アプリケーションのソース コードを作成します。

      この例のサンプル アプリケーションは PlotExample\PlotCSApp\PlotApp.cs にあります。

       PlotApp.cs

      次のステートメントは、Plotter クラスのインスタンスを作成します。

      Plotter plotter= new Plotter(); 

      次のステートメントは、ネイティブ plotValuesMWNumericArray に明示的にキャストしてから、メソッド drawgraph を呼び出します。

      plotter.drawgraph((MWNumericArray)plotValues); 
    • Visual Basic

      Visual Basic を使用する場合は、コンポーネントにアクセスする Visual Basic アプリケーションのソース コードを作成します。

      この例のサンプル アプリケーションは PlotExample\PlotVBApp\PlotApp.vb にあります。

       PlotApp.vb

      次のステートメントは、Plotter クラスのインスタンスを作成します。

      Dim plotter As Plotter = New Plotter

      次のステートメントは、メソッド drawgraph を呼び出します。

      plotter.drawgraph(coords)

    いずれの場合も、PlotApp プログラムにより次が実行されます。

    • double 値をもつ 2 つの配列を作成する。

    • Plotter オブジェクトを作成する。

    • drawgraph メソッドを呼び出し、MATLAB 関数 plot を使用して方程式をプロットする。

    • MWNumericArray を使用して、drawgraph メソッドで方程式をプロットするために必要なデータを表す。

    • try-catch ブロックを使用して例外をキャッチして処理する。

  5. Visual Studio を使用して、ご使用のアプリケーション言語に対応した .NET プロジェクト ファイルを開きます。

    • C#

      C# を使用する場合は、PlotCSApp フォルダーにこの例の Visual Studio .NET プロジェクト ファイルが含まれています。Windows® エクスプローラーPlotCSApp.csproj をダブルクリックして、Visual Studio .NET でプロジェクトを開きます。[PlotCSApp.csproj] を右クリックし、[MATLAB の外部で開く] を選択して、デスクトップから開くこともできます。

    • Visual Basic

      Visual Basic を使用する場合は、PlotVBApp フォルダーにこの例の Visual Studio .NET プロジェクト ファイルが含まれています。Windows エクスプローラーPlotVBApp.vbproj をダブルクリックして、Visual Studio .NET でプロジェクトを開きます。[PlotVBApp.vbproj] を右クリックし、[MATLAB の外部で開く] を選択して、デスクトップから開くこともできます。

  6. アセンブリを生成またはインストールしたフォルダーにあるアセンブリ ファイル PlotComp.dll への参照を追加します。

  7. MWArray API への参照を追加します。

    MATLAB がシステムにインストールされている場合matlabroot\toolbox\dotnetbuilder\bin\win64\<version>\MWArray.dll
    MATLAB Runtime がシステムにインストールされている場合<MATLAB_RUNTIME_INSTALL_DIR>\toolbox\dotnetbuilder\bin\win64\<version>\MWArray.dll

  8. Visual Studio .NET で PlotApp アプリケーションをビルドして実行します。

    アプリケーションにより、次のプロットが表示されます。

    Plot of x squared.

  9. この例から発展させるには、以下のようにします。

    • 生成されたアプリケーションを別のコンピューターで実行してみる。

    • compiler.package.installer を使用してパッケージ用のインストーラーをビルドしてみる。

    • 複数の関数で構成されたアセンブリを統合してみる。

電話帳の作成

この例では、MATLAB 関数を呼び出して、電話番号が含まれた構造体配列を変更する .NET アセンブリを作成します。

ファイル

MATLAB 関数の場所matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\PhoneBookExample\PhoneBookComp\makephone.m
C# コードの場所matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\PhoneBookExample\PhoneBookCSApp\PhoneBookApp.cs
Visual Basic コードの場所matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\PhoneBookExample\PhoneBookVBApp\PhoneBookApp.vb

手順

  1. MATLAB に付属している以下のフォルダーを作業フォルダーにコピーします。

    matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\PhoneBookExample

    MATLAB コマンド プロンプトで、作業フォルダー内の PhoneBookExample\PhoneBookComp サブフォルダーに移動します。

  2. PhoneBookExample\PhoneBookComp にある関数 makephone を確認します。

    function book = makephone(friends)
    book = friends;
    for i = 1:numel(friends)
        numberStr = num2str(book(i).phone);
        book(i).external = ['(508) 555-' numberStr];
    end

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

    friends(1).name = "Jordan Robert";
    friends(1).phone = 3386;
    friends(2).name = "Mary Smith";
    friends(2).phone = 3912;
    struct2table(makephone(friends))
    ans =
    
      2×3 table
    
             name          phone         external     
        _______________    _____    __________________
    
        "Jordan Robert"    3386     {'(508) 555-3386'}
        "Mary Smith"       3912     {'(508) 555-3912'}
    
  3. 次の情報を使用して、ライブラリ コンパイラ アプリまたは compiler.build.dotNETAssembly によって .NET コンポーネントをビルドします。

    フィールド
    ライブラリ名PhoneBookComp
    クラス名PhoneBook
    コンパイルするファイルmakephone

    たとえば、compiler.build.dotNETAssembly を使用している場合は、以下を入力します。

    buildResults = compiler.build.dotNETAssembly('makephone.m', ...
    'AssemblyName','PhoneBookComp', ...
    'ClassName','PhoneBook');

    詳細については、.NET アセンブリの生成と .NET アプリケーションのビルドの手順を参照してください。

  4. コンポーネントにアクセスするために C# または Visual Basic のどちらを使用するのかを決定します。

    • C#

      C# を使用する場合は、コンポーネントにアクセスする C# アプリケーションのソース コードを作成します。

      この例のサンプル アプリケーションは
      PhoneBookExample\PhoneBookCSApp\PhoneBookApp.cs にあります。

       PhoneBookApp.cs

    • Visual Basic

      Visual Basic を使用する場合は、コンポーネントにアクセスする Visual Basic アプリケーションのソース コードを作成します。

      この例のサンプル アプリケーションは
      \PhoneBookExample\PhoneBookVBApp\PhoneBookApp.vb にあります。

       PhoneBookApp.vb

    いずれの場合も、PhoneBookApp プログラムにより次が実行されます。

    • MWStructArray を使用して構造体配列を作成し、名前と電話番号が含まれた例の電話帳データを表す。

    • 次のように Phonebook クラスを thePhonebook オブジェクトとしてインスタンス化する。
      thePhonebook = new phonebook();

    • 次のように、MATLAB 関数 makephone を呼び出し、追加フィールドを追加することで構造体の変更コピーを作成する。
      result = thePhonebook.makephone(1, friends);

    • 結果の構造体配列を表示する。

  5. Visual Studio を使用して、ご使用のアプリケーション言語に対応した .NET プロジェクト ファイルを開きます。

    • C#

      C# を使用する場合は、PhoneBookCSApp フォルダーにこの例の Visual Studio .NET プロジェクト ファイルが含まれています。Windows エクスプローラーPhoneBookCSApp.csproj をダブルクリックして、Visual Studio .NET でプロジェクトを開きます。[PhoneBookCSApp.csproj] を右クリックし、[MATLAB の外部で開く] を選択して、デスクトップから開くこともできます。

    • Visual Basic

      Visual Basic を使用する場合は、PhoneBookVBApp フォルダーにこの例の Visual Studio .NET プロジェクト ファイルが含まれています。Windows エクスプローラーPhoneBookVBApp.vbproj をダブルクリックして、Visual Studio .NET でプロジェクトを開きます。[PhoneBookVBApp.vbproj] を右クリックし、[MATLAB の外部で開く] を選択して、デスクトップから開くこともできます。

  6. アセンブリを生成したフォルダーにあるアセンブリ ファイル PhoneBookComp.dll への参照を作成します。

  7. MWArray API への参照を作成します。これは以下の場所にあります。

    MATLABmatlabroot\toolbox\dotnetbuilder\bin\win64\<version>\MWArray.dll
    MATLAB Runtime<MATLAB_RUNTIME_INSTALL_DIR>\toolbox\dotnetbuilder\bin\win64\<version>\MWArray.dll

  8. Visual Studio .NET で PhoneBookComp アプリケーションをビルドして実行します。

    このアプリケーションにより、次の出力が表示されます。

    Friends: 
    2x2 struct array with fields:
        name
        phone
    Result: 
    2x2 struct array with fields:
        name
        phone
        external
    Result record 2:
    Mary Smith
    3912
    (508) 555-3912
    
    Entire structure:
    Number of Elements: 4
    Dimensions: 2-by-2
    Number of Fields: 3
    Standard MATLAB view:
    2x2 struct array with fields:
        name
        phone
        external
    Walking structure:
    Element 1
       name: Jordan Robert
       phone: 3386
       external: (508) 555-3386
    Element 2
       name: Mary Smith
       phone: 3912
       external: (508) 555-3912
    Element 3
       name: Stacy Flora
       phone: 3238
       external: (508) 555-3238
    Element 4
       name: Harry Alpert
       phone: 3077
       external: (508) 555-3077

参考

| |

関連するトピック