How to Quit MATLAB using C# & COM?

20 ビュー (過去 30 日間)
Shawn
Shawn 2011 年 8 月 9 日
I have a C# program that invokes a new dedicated Matlab instance as follows:
Type mlt = Type.GetTypeFromProgID("Matlab.Application.Single");
MLApp.MLApp ml = (MLApp.MLApp)Activator.CreateInstance(mlt);
However, I am unable to get the Matlab instance to quit. I have tried ml.Quit();, but the instance remains running. I have also tried ml.Execute("quit");, but I get a .NET error. Is there another way or more I need to do to get Matlab to quit?

採用された回答

Friedrich
Friedrich 2011 年 8 月 9 日
Hi,
Fangjun is right. It seems like you are using late binding. This makes coding a bit more complicated. Why aren't you using early binding? To do early binding add as reference to your C# projekt the COM refernce named Matlab Application (Version 7.**) Type Library. And than as code simply do:
MLApp.MLApp ML = new MLApp.MLApp();
ML.PutWorkspaceData("test", "base", 4);
String output = ML.Execute("whos");
System.Console.Write(output);
// keep application running after some keystroke
System.Console.Read();
ML.Quit();
  3 件のコメント
Conrad
Conrad 2011 年 12 月 1 日
Hi Shawn, did you make any progress on this...having the same problem.
Friedrich
Friedrich 2011 年 12 月 3 日
I created a C# project where I added the ML Type Library as reference (win 7 64bit, R2011b). I used the following code which worked fine:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace test
{
class Program
{
static void Main(string[] args)
{
Type mlt = Type.GetTypeFromProgID("Matlab.Application.Single");
MLApp.MLApp ml = (MLApp.MLApp)Activator.CreateInstance(mlt);
ml.Visible = 1;
//wait 5 seconds
System.Threading.Thread.Sleep(5000);
ml.Quit();
System.Console.WriteLine("Press any key to close this appl.");
System.Console.Read();
}
}
}
Which code do you use in order to get this behavior where you can't close MATLAB?

サインインしてコメントする。

その他の回答 (3 件)

Fangjun Jiang
Fangjun Jiang 2011 年 8 月 9 日
Here is what I found in the document. I couldn't test it though whether ml.Quit works or not.
ml.Quit
ml.delete
Example — Calling MATLAB from a C# Client
This example creates data in the client C# program and passes it to MATLAB. The matrix (containing complex data) is then passed back to the C# program.The reference to the MATLAB Type Library for C# is:
MLApp.MLAppClass matlab = new MLApp.MLAppClass();
Here is the complete example:
using System;
namespace ConsoleApplication4
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
MLApp.MLAppClass matlab = new MLApp.MLAppClass();
System.Array pr = new double[4];
pr.SetValue(11,0);
pr.SetValue(12,1);
pr.SetValue(13,2);
pr.SetValue(14,3);
System.Array pi = new double[4];
pi.SetValue(1,0);
pi.SetValue(2,1);
pi.SetValue(3,2);
pi.SetValue(4,3);
matlab.PutFullMatrix("a", "base", pr, pi);
System.Array prresult = new double[4];
System.Array piresult = new double[4];
matlab.GetFullMatrix("a", "base", ref prresult, ref piresult);
}
}
}
  1 件のコメント
Shawn
Shawn 2011 年 8 月 9 日
I get the following message when adding ml.delete:
'MLApp.MLApp' does not contain a definition for 'delete'

サインインしてコメントする。


Moe
Moe 2012 年 9 月 18 日
I use:
public static MLApp.MLApp matlab;
matlab = new MLApp.MLApp();
matlab.Execute("exit");

Andrea Di Domenico
Andrea Di Domenico 2013 年 6 月 18 日
I use this code:
try
{
matlab.Execute("quit");
}
catch (Exception ex)
{
}
It is not so clean but it works

カテゴリ

Help Center および File ExchangeMATLAB Compiler SDK についてさらに検索

タグ

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by