Передача объекта по ссылке

Массив MATLAB

MWObjectArray, специальный подкласс MWArray, позволяет вам создать MATLAB® массив, который ссылается на объекты .NET.

Примечание

Для получения информации об этих классах преобразования данных смотрите MATLAB MWArray Class Ссылка, доступный в matlabroot\ help\dotnetbuilder\MWArrayAPI папка, где matlabroot представляет вашу папку установки MATLAB

Перенос и передача объектов .NET с MWObjectArray

Можно создать обертку кода MATLAB вокруг объектов .NET с помощью MWObjectArray. Используйте этот метод, чтобы передать объекты по ссылке на функции MATLAB и вернуть объекты .NET. Примеры в этом разделе представляют некоторые общие примеры использования.

Передача объекта .NET в MATLAB Compiler SDK сборку .NET

Чтобы передать объект в сборку MATLAB Compiler SDK™:

  1. Напишите функцию MATLAB, которая ссылается на тип .NET:

    function addItem(hDictionary, key, value)
    
           if ~isa(hDictionary,'System.Collections.Generic.IDictionary')
               error('foo:IncorrectType', 
                 ... 'expecting a System.Collections.Generic.Dictionary');
           end 
         
           hDictionary.Add(key, value);
     
         end
    

  2. Создайте объект .NET, который будет передан в функцию MATLAB:

         Dictionary char2Ascii= new Dictionary();
         char2Ascii.Add("A", 65);
         char2Ascii.Add("B", 66);
    
  3. Создайте образец MWObjectArray для переноса объекта .NET:

     MWObjectArray MWchar2Ascii= 
               new MWObjectArray(char2Ascii);
    
  4. Передайте обернутый объект в функцию MATLAB:

    myComp.addItem(MWchar2Ascii,'C', 67);
    

Возврат пользовательского объекта .NET в функцию MATLAB с использованием развертываемого MATLAB Compiler SDK .NET Assembly

Можно также использовать MWObjectArray клонирование объекта в сборку MATLAB Compiler SDK .NET. Продолжив пример в разделе Передача объекта .NET в сборку MATLAB Compiler SDK .NET, выполните следующие шаги:

  1. Напишите функцию MATLAB, которая ссылается на тип .NET:

     function result= add(hMyDouble, value)
    
           if ~isa(hMyDouble,'MyDoubleComp.MyDouble')
              error('foo:IncorrectType', 'expecting a MyDoubleComp.MyDouble');
           end
           hMyDoubleClone= hMyDouble.Clone();
           result= hMyDoubleClone.Add(value);
     
         end
    
  2. Создайте объект:

    MyDouble myDouble= new MyDouble(75);
    
  3. Создайте образец MWObjectArray для переноса объекта .NET:

    MWObjectArray MWdouble= new MWObjectArray(myDouble);
                origRef = new MWObjectArray(hash);      

  4. Передайте обернутый объект в функцию MATLAB и получите возвращенный клонированный объект:

    MWObjectArray result= 
                (MWObjectArray)myComp.add(MWdouble, 25);
  5. Отключите объект .NET и распечатайте результат:

    MyDouble doubleClone= (MyDouble)result.Object;
    
         Console.WriteLine(myDouble.ToDouble());
         Console.WriteLine(doubleClone.ToDouble());
    

Клонирование MWObjectArray

При вызове Clone метод по MWObjectArrayдля обернутого объекта применяются следующие правила.

  • Если обернутый объект является ValueType, он глубоко скопирован.

  • Если объект не является ValueType и реализует ICloneable, а Clone вызывается метод для объекта.

  • The MemberwiseClone вызывается метод для обернутого объекта.

 Вызов клона в MWObjectArray

Пример оптимизации с использованием MWObjectArray

Полный пример того, как использовать MWObjectArray чтобы создать ссылку на объект .NET и передать его компоненту, смотрите Интеграцию стандартных программ оптимизации MATLAB с целевыми функциями в .NET и Интеграцию стандартных программ оптимизации MATLAB с целевыми функциями в Visual Basic.

MWObjectArray и прикладные Области

Каждое веб-приложение ASP .NET, развернутое в IIS, запускается в отдельном AppDomain.

Интерфейс MATLAB .NET должен поддерживать тип .NET, упакованный MWObjectArray. Если на MWObjectArray создается в AppDomain по умолчаниюобернутый тип не имеет других ограничений.

Если на MWObjectArray не создается в AppDomain по умолчанию, упакованный тип .NET должен быть сериализуемым. Это ограничение накладывается тем фактом, что объект нужно маршалить из не используемого по умолчанию AppDomain к значению по умолчанию AppDomain в порядок для доступа к нему MATLAB.

Ограничение MWObjectArray

Если у вас есть какие-либо глобальные объекты в коде C #, то вы получите Windows® исключение при выходе из приложения. Чтобы преодолеть это ограничение, используйте одно из следующих решений:

  • Явное удаление глобальных объектов перед выходом из приложения.

    globalObj.Destroy();

  • Функции TerminateApplicationEx метод перед выходом из приложения.

    MWMCR.TerminateApplicationEx();

    Для получения дополнительной информации о TerminateApplicationEx, см. Документация по MWArray API.

Для просмотра документации необходимо авторизоваться на сайте