How to Quit MATLAB using C# & COM?

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?

 Risposta accettata

Friedrich
Friedrich il 9 Ago 2011
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 Commenti

Shawn
Shawn il 9 Ago 2011
The implementation I wrote is the only way I have found that I can specify a ProgID, specifically "Matlab.Application.Single". Is there a way I can specify a ProgID using your method?
Conrad
Conrad il 1 Dic 2011
Hi Shawn, did you make any progress on this...having the same problem.
Friedrich
Friedrich il 3 Dic 2011
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?

Accedi per commentare.

Più risposte (3)

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 Commento

Shawn
Shawn il 9 Ago 2011
I get the following message when adding ml.delete:
'MLApp.MLApp' does not contain a definition for 'delete'

Accedi per commentare.

Moe
Moe il 18 Set 2012

0 voti

I use:
public static MLApp.MLApp matlab;
matlab = new MLApp.MLApp();
matlab.Execute("exit");
I use this code:
try
{
matlab.Execute("quit");
}
catch (Exception ex)
{
}
It is not so clean but it works

Categorie

Scopri di più su MATLAB Compiler SDK in Centro assistenza e File Exchange

Prodotti

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by