Main Content

実行中の MATLAB セッションへの .NET アプリケーションの接続

MATLAB の検索と接続

ローカル マシンで実行中の共有 MATLAB® セッションに .NET エンジンを接続することができます。共有 MATLAB セッションに接続するには、以下を実行します。

  • MATLAB を共有エンジン セッションとして起動するか、matlab.engine.shareEngine を使用して実行中の MATLAB プロセスを共有にします。

  • MATLABEngine.FindMATLAB または MATLABEngine.FindMATLABAsync 静的メソッドを使用して、MATLAB 共有セッションの名前を検索します。これらのメソッドについては、MathWorks.MATLAB.Engine.MATLABEngine を参照してください。

  • 共有 MATLAB セッションの名前が含まれる文字列を MATLABEngine.ConnectMATLAB または MATLABEngine.ConnectMATLABAsync 静的メソッドに渡します。これらのメソッドにより、エンジンが共有セッションに接続されます。

MATLABEngine.ConnectMATLABMATLABEngine.ConnectMATLABAsync を呼び出す際に共有 MATLAB セッションの名前を指定しない場合、エンジンは最初に作成された共有 MATLAB セッションを使用します。使用可能な共有 MATLAB セッションがない場合、エンジンは共有 MATLAB セッションを作成し、このセッションに接続します。

MATLAB への同期的な接続

MATLAB から matlab.engine.shareEngine を呼び出して、MATLAB セッションを共有セッションに変換します。

matlab.engine.shareEngine

セッションを検索し、.NET から同期的に接続します。

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

namespace MathWorks.MATLAB.Engine.ConsoleExamples {
    public class Program {   
        public static void Main(string[] args) {
            Console.Write("Starting MATLAB... ");
            string[] names = MATLABEngine.FindMATLAB(); 
            if (names.Length == 0)
                Console.Error.WriteLine("No shared MATLAB sessions found.");
            string myMATLAB = names[0]; // Pick the first
            try {
                using (dynamic matlab = MATLABEngine.ConnectMATLAB(myMATLAB)) {
                    matlab.disp(new RunOptions(nargout: 0), "Hello, shared MATLAB.");
                }
            } catch (MATLABNotAvailableException) {
                Console.Error.WriteLine("Could not connect to MATLAB engine.");
            }

            // Call when you no longer need MATLAB Engine in your application.
            MATLABEngine.TerminateEngineClient();
        }
    }
}

MATLAB への非同期的な接続

MATLAB から matlab.engine.shareEngine を呼び出して、MATLAB セッションを共有セッションに変換します。

matlab.engine.shareEngine

セッションを検索し、非同期的に接続します。

using MathWorks.MATLAB.Exceptions;
using MathWorks.MATLAB.Types;
using System.Threading;
using System.Threading.Tasks;
using System;

namespace MathWorks.MATLAB.Engine.ConsoleExamples {
    public class Program {
        static async void Main(string[] args) {
            string[] names = await MATLABEngine.FindMATLABAsync();
            if (names.Length == 0)
                Console.WriteLine("No MATLAB sessions available.");
            else {
                dynamic matlab = await MATLABEngine.ConnectMATLABAsync(names[0]);
                matlab.disp(new RunOptions(nargout: 0), "Hello, shared MATLAB.");
            }
        }
    }
}

共有セッションの名前の指定

MATLAB 関数 matlab.engine.shareEngine の実行時に、共有 MATLAB セッションの名前を指定することができます。そうすれば、MATLABEngine.FindMATLABMATLABEngine.FindMATLABAsync を使用して名前を検索する必要がなくなります。

たとえば、MATLAB を起動して、共有セッションに myMatlabEngine という名前を指定します。

matlab -r "matlab.engine.shareEngine('myMatlabEngine')"

名前が付けられた MATLAB セッションに接続します。

using MathWorks.MATLAB.Types;
using System;

namespace MathWorks.MATLAB.Engine.ConsoleExamples
{
    public class Program {   
        public static void Main(string[] args) {
            using (dynamic matlab = MATLABEngine.ConnectMATLAB("myMatlabEngine")) {
            matlab.disp(new RunOptions(nargout: 0), "Hello, myMatlabEngine.");
            // Call when you no longer need MATLAB Engine in your application.
            MATLABEngine.TerminateEngineClient();
        }
    }
}

参考

|

関連するトピック