Реализуйте безопасный интерфейс типа

Для реализации безопасного интерфейса типа обычно требуется опыт разработчика .NET, поскольку он требует выполнения ряда задач программирования от среднего до расширенного.

Совет

Объекты данных, которые просто проходят через цель или MATLAB® окружения, возможно, не должны быть обобщены, особенно если они не пересекают контур процесса. Потому что маршалинг дорого обходится, только маршал по требованию.

После записи и тестирования кода MATLAB разработайте интерфейс .NET, который поддерживает нативные типы через API на C # или Visual Basic®. В этом примере интерфейс, IAddOne, написано на C #.

Каждый метод в интерфейсе должен точно совпадать с развернутой функцией MATLAB.

The IAddOne интерфейс задает шесть перегрузок addOne:

using System.ServiceModel;

[ServiceContract]
public interface IAddOne
{
    [OperationContract(Name = "addOne_1")]
    int addOne(int x);

    [OperationContract(Name = "addOne_2")]
    void addOne(ref int y, int x);

    [OperationContract(Name = "addOne_3")]
    void addOne(int x, ref int y);

    [OperationContract(Name = "addOne_4")]
    System.Double addOne(System.Double x);

    [OperationContract(Name = "addOne_5")]
    System.Double[] addOne(System.Double[] x);

    [OperationContract(Name = "addOne_6")]
    System.Double[][] addOne(System.Double[][] x);
}

Как видим, все методы имеют один вход и один выход (чтобы соответствовать MATLAB addOne function), хотя тип и положение этих параметров изменяются.

Правила преобразования данных для использования безопасного интерфейса типа

  • В функции MATLAB выходы объявления появляются перед входами. Для примера, в addOne function, выходной y появляется перед входом x. Это упорядоченное расположение не требуется для функций интерфейса .NET. Входные параметры могут появиться до или после выходов, или они могут быть смешаны вместе.

  • MATLAB Compiler SDK™ соответствует функциям интерфейса .NET общедоступным функциям MATLAB по имени функции и количеству аргументов. В addOne например, необходимо назвать как функцию интерфейса .NET, так и функцию MATLAB addOne и обе функции должны иметь равное количество заданных аргументов.

  • Количество и относительный порядок входа и выходных аргументов очень важны.

    • При оценке порядка параметров рассматривается только порядок одинаковых параметров (входы или выходы), независимо от того, где они появляются в списке параметров.

    • Функция в интерфейсе может иметь меньше входов, чем ее соответствующая функция MATLAB, но не больше.

  • Отображение аргументов происходит в соответствии с порядком аргументов, а не с именем аргумента.

  • Функция возврата значение, если задано, отсчитывается как первый выход.

  • Необходимо использовать out параметры для нескольких выходов.

    • Альтернативно, ref параметр может использоваться для out. ref и out параметры являются синонимами.

  • MATLAB не поддерживает перегрузку функций. Таким образом, все пользовательские перегрузки функции с заданным именем будут сопоставлены с функцией, сгенерированной MATLAB Compiler SDK.

Полные инструкции по управлению преобразованием данных с помощью безопасных интерфейсов см. в разделе Типы .NET в типы MATLAB.