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

Массив MATLAB

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

Примечание

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

Перенос и передающие объекты.NET с MWObjectArray

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

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

Передать объект в блок 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 Используя развернутый блок.NET MATLAB Compiler SDK

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

  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 для объекта называется.

  • Метод MemberwiseClone называется на перенесенном объекте.

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

Пример оптимизации Используя MWObjectArray

Для полного примера того, как использовать MWObjectArray, чтобы создать ссылку на объект.NET и передать его компоненту, смотрите Объединяющиеся Стандартные программы Оптимизации MATLAB с Целевыми функциями на.NET и Объединяющиеся Стандартные программы Оптимизации MATLAB с Целевыми функциями в Visual Basic.

MWObjectArray и домены приложения

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

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

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

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

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

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

    globalObj.Destroy();

  • Вызовите метод TerminateApplicationEx прежде, чем выйти из приложения.

    MWMCR.TerminateApplicationEx();

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