MWObjectArray
, специальный подкласс MWArray
, позволяет вам создать MATLAB® массив, который ссылается на объекты .NET.
Примечание
Для получения информации об этих классах преобразования данных смотрите MATLAB MWArray Class Ссылка, доступный в
папка, где matlabroot
\ help\dotnetbuilder\MWArrayAPImatlabroot
представляет вашу папку установки 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
клонирование объекта в сборку MATLAB Compiler SDK .NET. Продолжив пример в разделе Передача объекта .NET в сборку MATLAB Compiler SDK .NET, выполните следующие шаги:
Напишите функцию 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
вызывается метод для объекта.
The MemberwiseClone
вызывается метод для обернутого объекта.
Полный пример того, как использовать MWObjectArray
чтобы создать ссылку на объект .NET и передать его компоненту, смотрите Интеграцию стандартных программ оптимизации MATLAB с целевыми функциями в .NET и Интеграцию стандартных программ оптимизации MATLAB с целевыми функциями в Visual Basic.
Каждое веб-приложение ASP .NET, развернутое в IIS, запускается в отдельном AppDomain
.
Интерфейс MATLAB .NET должен поддерживать тип .NET, упакованный MWObjectArray
. Если на MWObjectArray
создается в AppDomain
по умолчаниюобернутый тип не имеет других ограничений.
Если на MWObjectArray
не создается в AppDomain
по умолчанию, упакованный тип .NET должен быть сериализуемым. Это ограничение накладывается тем фактом, что объект нужно маршалить из не используемого по умолчанию
AppDomain
к значению по умолчанию AppDomain
в порядок для доступа к нему MATLAB.
Если у вас есть какие-либо глобальные объекты в коде C #, то вы получите Windows® исключение при выходе из приложения. Чтобы преодолеть это ограничение, используйте одно из следующих решений:
Явное удаление глобальных объектов перед выходом из приложения.
globalObj.Destroy();
Функции TerminateApplicationEx
метод перед выходом из приложения.
MWMCR.TerminateApplicationEx();
Для получения дополнительной информации о TerminateApplicationEx
, см. Документация по MWArray API.