필터 지우기
필터 지우기

C# - Keep in memory variables between calling 2 different matlab routines

조회 수: 3 (최근 30일)
Is it possible to keep in memory variables used in a 1st matlab routine called by C#, when I call a 2nd matlab routine?
For example if I have in my C# application
matlabroutine1(); matlabroutine2();
and matlabroutine1 allocates a variable value1, when I call matlabroutine2 value1 is available?

채택된 답변

Walter Roberson
Walter Roberson 2011년 7월 26일
This may be a situation in which using global variables would be appropriate.

추가 답변 (1개)

owr
owr 2011년 7월 26일
What you are looking for is "setmcruserdata" and "getmcruserdata". Im assuming you are using the Builder NE. If so, also make sure that "matlabroutine1" and "matlabroutine2" are both methods in the same deployed C# class. These methods will share a common workspace in the MCR that will enable them to share data in the way you want.
  댓글 수: 3
alorenzom
alorenzom 2011년 7월 27일
Dear
I tried the following project:
---------------------------------------------
I builded this
---------------------------------------------
// Class1.cs
namespace Interfaccia
{
public interface Class1
{
void dammiA(out int Num,string varNm);
void Aggiungi(string varNm);
}
}
---------------------------------------------
---------------------------------------------
then I builded this
---------------------------------------------
% Aggiungi.m
function Aggiungi(varNm)
value = 10;
setmcruserdata(varNm, value);
end
% dammiA.m
function b = dammiA(varNm)
b = getmcruserdata(varNm);
end
---------------------------------------------
---------------------------------------------
then I builded this
---------------------------------------------
namespace Solutore
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
Class1 Calcolo = new Calcolo.Class1Class1();
int b;
string varNm ;
varNm = "varNm";
Calcolo.Aggiungi(varNm);
Calcolo.dammiA(out b, varNm);
}
}
}
---------------------------------------------
---------------------------------------------
and after executing button1_Click I got at "Calcolo.dammiA(out b, varNm);"
ArgumentException non è stata gestita
Cannot convert MWArray to requested type
owr
owr 2011년 7월 27일
You have the correct idea with the .m functions you wrote. I think the issue is in how you are calling it in C#:
Calcolo.dammiA(out b, varNm);
You declared "b" to be an int, all outputs from deployed MATLAB functions need to be some sort of "MWArray". It looks like you are trying to use an interface wrapper with "Class1". I would leave this out until you are comfortable working with MWArray's. I would expect that you will have to do something more like this:
MWArray[] mlout = Calcolo.dammiA(1, varNm); // "1" means you are only expecting one output.
int b = (int)(MWNumericArray)mlout[0] // Since you know the first(only) output is an integer
The documentation for Builder NE has many examples of how to work with MWArrays.
Good luck!

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Deploy to .NET Applications Using MWArray API에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by