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

Массив 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.

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