MWObjectArray
, специальный подкласс MWArray
, позволяет вам создать массив MATLAB® тот.NET ссылок объекты.
Для получения информации об этих классах преобразования данных см. Справочник по библиотеке классов MWArray MATLAB, доступный в папке
, где matlabroot\help\dotnetbuilder\MWArrayAPI
matlabroot
представляет вашу папку установки MATLAB
Можно создать обертку кода MATLAB вокруг объектов.NET с помощью MWObjectArray
. Используйте этот метод, чтобы передать объекты в отношении функций MATLAB и возвратить объекты.NET. Примеры в этом разделе представляют некоторые случаи общего использования.
Передать объект в блок MATLAB Compiler SDK™:
Запишите функцию 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
Создайте объект.NET передать функции MATLAB:
Dictionary char2Ascii= new Dictionary(); char2Ascii.Add("A", 65); char2Ascii.Add("B", 66);
Создайте экземпляр MWObjectArray
, чтобы перенести объект.NET:
MWObjectArray MWchar2Ascii= new MWObjectArray(char2Ascii);
Передайте перенесенный объект функции MATLAB:
myComp.addItem(MWchar2Ascii,'C', 67);
Можно также использовать MWObjectArray
, чтобы клонировать объект в блоке.NET MATLAB Compiler SDK. Продолжая пример мимоходом Объект.NET в блок.NET MATLAB Compiler SDK, выполните следующие шаги:
Запишите функцию 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
Создайте объект:
MyDouble myDouble= new MyDouble(75);
Создайте экземпляр MWObjectArray
, чтобы перенести объект.NET:
MWObjectArray MWdouble= new MWObjectArray(myDouble); origRef = new MWObjectArray(hash);
Передайте перенесенный объект функции MATLAB и получите возвращенный клонированный объект:
MWObjectArray result= (MWObjectArray)myComp.add(MWdouble, 25);
Разверните.NET, возражают и распечатывают результат:
MyDouble doubleClone= (MyDouble)result.Object; Console.WriteLine(myDouble.ToDouble()); Console.WriteLine(doubleClone.ToDouble());
При вызове метода Clone
на MWObjectArray
следующие правила касаются перенесенного объекта.
Если перенесенным объектом является ValueType
, он глубоко скопирован.
Если объект не является ValueType
и реализует ICloneable
, метод Clone
для объекта называется.
Метод MemberwiseClone
называется на перенесенном объекте.
Для полного примера того, как использовать MWObjectArray
, чтобы создать ссылку на объект.NET и передать его компоненту, смотрите Объединяющиеся Стандартные программы Оптимизации MATLAB с Целевыми функциями на.NET и Объединяющиеся Стандартные программы Оптимизации MATLAB с Целевыми функциями в Visual Basic.
Каждое веб-приложение.NET ASP, развернутое на IIS, запускается в отдельном AppDomain
.
Интерфейс.NET MATLAB должен поддержать тип.NET, перенесенный MWObjectArray
. Если MWObjectArray
создается в AppDomain
по умолчанию, перенесенный тип не имеет никаких других ограничений.
Если MWObjectArray
не создается в AppDomain
по умолчанию, перенесенный тип.NET должен быть сериализуемым. Это ограничение наложено тем, что объект должен быть упорядочен от AppDomain
не по умолчанию до AppDomain
по умолчанию для MATLAB, чтобы получить доступ к нему.
Если у вас будут какие-либо глобальные объекты в вашем коде C# затем, то вы получите исключение Windows® при выходе из приложения. Чтобы преодолеть это ограничение, используйте одно из этих решений:
Явным образом очистите глобальные объекты прежде, чем выйти из приложения.
globalObj.Destroy();
Вызовите метод TerminateApplicationEx
прежде, чем выйти из приложения.
MWMCR.TerminateApplicationEx();
Для получения дополнительной информации о TerminateApplicationEx
см. документацию API MWArray.