2013-09-10 5 views
2

Я разработал код в MATLAB, и он работает нормально. Я работал в GUI в MATLAB, но для меня это была головная боль. Я думаю, что я могу создать GUI просто и эффективно. Можем ли мы создать графический интерфейс в C#, который также будет запускать весь код MATLAB, который я разработал?Можем ли мы создать графический интерфейс в C#, который будет запускать код MATLAB в обратной руке?

+0

возможно дубликат [Run MATLAB с C# и дать параметр MATLAB] (http://stackoverflow.com/questions/8857548/run-matlab-from- c-sharp-and-give-parameter-to-matlab) –

+0

Если ваш графический интерфейс относительно прост, другим способом является вызов модального диалогового окна .NET в Matlab и в соответствии с выбором пользователя в диалоговом окне вы можете запустить определенный скрипт Matlab , Этот метод заслуживает того, что вам не нужно оставлять Matlab вообще. –

ответ

4

Да, это возможно. Для получения дополнительной информации, посмотрите на:

Если вам нужен быстрый и грязный способ обернуть MATLAB код с C# GUI (например, WinForms), одним из вариантов является создание exe из вашего кода MATLAB (.m) - из .NET, вы можете легко запустить этот exe в качестве нового процесса. Обратите внимание, что этот подход может быть не лучшим в некоторых ситуациях, так как задержка, вызванная вызовом exe, может быть довольно существенной (как объясняет другой ответ).

Пример: во-первых, написать MATLAB код в виде функции:

function y=SamplePlot(p, d, w, t) 
numericValueP=str2num(p); 
numericValueD=str2num(d); 
numericValueW=str2num(w); 
time=str2num(t); 

%... do stuff ... 
plot(...); 

Входные параметры будут переданы на этот код в качестве параметров строки через командную строку, следовательно, они будут преобразованы с помощью str2num. Например. MATLAB вызов

SamplePlot('1', '2', '3', '4') 

будет представлена ​​как

SamplePlot.exe 1 2 3 4 

Теперь создайте автономное приложение консольное из .m файла: в MATLAB консоли написать:

deploytool 

Имя: SamplePlot. prj (например). Цель: консольное приложение. Добавить файл .m. Пакет: добавьте MCR (это MATLAB Compiler Runtime - это то, что потребуется конечному пользователю, если у него нет MATLAB, для локального тестирования вам не нужно добавлять это). Затем используйте:

mbuild -setup 

Наконец, нажмите на значок 'сборки'. Через некоторое время генерируется exe. Теперь вы можете запустить этот exe как процесс из приложения C#, например. при нажатии кнопки:

private void button1_Click(object sender, EventArgs e) 
{ 
     string p=TextBox1.Text; 
     string d=TextBox2.Text; 
     string w=TextBox3.Text; 
     string t=TextBox4.Text; 
     string params = String.Format("{0} {1} {2} {3}",p,d,w,t); 
     System.Diagnostics.Process.Start("SamplePlot.exe", params); 
} 

У меня остались некоторые мелкие детали, но это один из возможных вариантов.

(Если я правильно помню, сборка также может быть сгенерирована таким образом: вы можете вызвать сборку вместо exe-файла).

+1

У MATLAB есть продукт (MATLAB Builder NE), построенный поверх MATLAB Compiler специально для создания сборников .NET: http://www.mathworks.com/products/netbuilder/. Не нужно связываться с файлами EXE, вы можете использовать сгенерированную сборку, как и любую другую библиотеку .NET. Результат, конечно, зависит от [MCR] (http://www.mathworks.com/products/compiler/mcr/) – Amro

1

Я довольно незнакомый с C#, но в итоге мне пришлось использовать .NET-классы из MATLAB.

Таким образом, вы также можете сделать это наоборот, чем предыдущие ответы предполагают:

Поскольку MATLAB имеет возможность создать/открыть .NET GUI-элементы, как диалог, я думаю, вы также должны быть в состоянии откройте свой .NET-GUI от MATLAB, а затем подключите свой MATLAB-код через обратные вызовы. См., Например,: http://www.mathworks.de/de/help/matlab/matlab_external/getting-started-with-net.html

В зависимости от того, как часто вы хотите, чтобы выполнить Matlab-код с графическим интерфейсом и сколько времени Matlab-обработка обычно, это также позволяет избежать довольно больших накладных расходов, которые, например, представленный с использованием .exe, сгенерированного с помощью компилятора MATLAB. Скажите, вы бы хотели сделать быстрые операции вычисления матрицы, занимая менее секунды с каждым другим нажатием кнопки, чем запуск standalone.exe каждый раз сделает ваш gui совершенно бесполезным.