Поддержки клиентов MATLAB® Production Server™.NET возможность MATLAB работы с входными параметрами переменной длины. Смотрите Ссылку функции MATLAB для полной информации на varargin
и varargout
.
Вы передаете входные параметры переменной MATLAB (varargin
) с помощью ключевого слова params
.
Например, считайте функцию MATLAB varargintest
, который берет вход переменной длины (varargin
) — содержащий строки и целые числа — и возвращает массив cell
s (o
).
function o = varargintest(s1, i2, varargin) o{1} = s1; o{2} = i2; idx = 3; for i=1:length(varargin) o{idx} = varargin{i}; idx = idx+1; end
Интерфейс C# VararginTest
реализует функцию MATLAB varargintest
.
public interface VararginTest { object[] varargintest(string s, int i, params object[] objArg); }
Поскольку вы отправляете вывод в массивы cell
в MATLAB, вы задаете совместимый тип массива C# object[]
в вашем интерфейсе. objArg
задает количество переданных входных параметров — в этом случае, два.
Метод C# TryVarargin
реализует VararginTest
, отправляя две строки и два целых числа к развернутой функции MATLAB, чтобы быть возвращенным как массив cell
.
public static void TryVarargin() { MWClient client = new MWHttpClient(); VararginTest mpsexample = client.CreateProxy<VararginTest>(new Uri("http://localhost:9910/mpsexample")); object[] vOut = mpsexample.varargintest("test", 20, false, new int[]{1,2,3}); Console.ReadLine(); }
Отметьте применяющие лучшые методы кодирования, проиллюстрированные этим примером:
И подпись функции MATLAB и подпись метода интерфейса C# используют имя varargintest
. И MATLAB и код C# обрабатывают два входных параметров переменной длины, строку и целое число.
Интерфейс.NET MATLAB поддерживает прямое преобразование между массивами ячеек MATLAB и массивами объектов C#. Смотрите Преобразование Данных с C# и Типами MATLAB и Преобразование Между Типами MATLAB и Типами C# для получения дополнительной информации.
Выходные аргументы переменной MATLAB (varargout
) получены путем передачи экземпляра массива System.Object[]
. Массив передается с атрибутом [varargout]
, заданный в блоке Mathworks.MATLAB.ProductionServer.Client.dll
.
Прежде, чем передать экземпляр System.Object[]
, инициализируйте экземпляр System.Object
массивов с максимальной длиной переменной в вашем вызывающем методе. Массив ограничивается одной размерностью.
Например, считайте функцию MATLAB varargouttest
, который берет один вход переменной длины (varargin
) и возвращается, одна переменная длина вывела (varargout
), а также две непеременных длины выходные параметры (out1
и out2
).
functionout [out1 out2 varargout] = varargouttest(in1, in2, varargin) out1 = modifyinput(in1); out2 =modifyinput(in2); for i=1:length(varargin) varargout{i} = modifyinput(varargin{i}); end function out = modifyinput(in) if ( isnumeric(in) ) out = in*2; elseif ( ischar(in) ) out = upper(in); elseif ( islogical(in) ) out = ~in; else out = in; end
Реализуйте функцию MATLAB varargouttest
с интерфейсом C# VarargoutTest
.
В методе интерфейса varargouttest
вы задаете несколько непеременных длин выходные параметры (o1
и o2
, с помощью ключевого слова out
, описанного в Коде Несколько Выходных параметров для Клиента.NET C#), вход double
(in1
) и вход char
(in2
).
Вы передаете вывод переменной длины (o3
) с помощью одно-мерного массива (object[]
с атрибутом [varargout]
), экземпляр System.Object[]
.
Как с Использованием varargin с Клиентом.NET, вы используете ключевое слово params
, чтобы передать вход переменной длины.
public interface VarargOutTest { void varargouttest(out double o1, out string o2, double in1, string in2, [varargout]object[] o3, params object[] varargIn); }
В вызывающем методе TryVarargout
обратите внимание, что и тип и длина вывода переменной (varargOut
) передаются ((short)12
).
public static void TryVarargout() { MWClient client = new MWHttpClient(); VarargOutTest mpsexample = client.CreateProxy<VarargOutTest>(new Uri("http://localhost:9910/mpsexample")); object[] varargOut = new object[3]; // get all 3 outputs double o1; string o2; mpsexample.varargouttest(out o1, out o2, 1.2, "hello", varargOut, true, (short)12, "test"); varargOut = new object[2]; // only get 2 outputs double o11; string o22; mpsexample.varargouttest(out o11, out o22, 1.2, "hello", varargOut, true, (short)12, "test"); }
Гарантируйте, что вы инициализируете varargOut
к соответствующей длине прежде, чем передать его как вход к методу varargouttest
.
Отметьте применяющие лучшые методы кодирования, проиллюстрированные этим примером:
И подпись функции MATLAB и подпись метода интерфейса C# используют имя varargouttest
. И MATLAB и код C# обрабатывают вход переменной длины, переменная длина вывод, и два несколько непеременных длин выходные параметры.
Интерфейс.NET MATLAB поддерживает прямое преобразование между массивами ячеек MATLAB и массивами объектов C#. Смотрите Преобразование Данных с C# и Типами MATLAB и Преобразование Между Типами MATLAB и Типами C# для получения дополнительной информации.