Поддержки клиентов 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# для получения дополнительной информации.