exponenta event banner

Класс MWUtil

MWUtil содержит набор статических служебных методов, используемых при обработке массива и инициализации приложения. Этот класс реализован внутренне как одиночный (только один глобальный экземпляр этого класса на экземпляр Microsoft ® Excel ®). Наиболее эффективно объявить одну переменную этого типа в глобальной области действия в каждом использующем ее модуле. Методы MWUtil являются:

Прототипы функций используют синтаксис Visual Basic ®.

Sub MWInitApplication (pApp как объект

)

Инициализирует библиотеку с текущим экземпляром Microsoft Excel.

Параметры

АргументНапечататьОписание

pApp

Object

Допустимая ссылка на текущее приложение Excel

Возвращаемое значение

Ничего.

Замечания

Эта функция должна вызываться один раз для каждого сеанса Excel, в котором используются COM-компоненты, созданные MATLAB ® Compiler™. Ошибка возникает, если выполняется вызов метода для класса-члена любого компонента MATLAB Compiler SDK™ COM, и библиотека не инициализирована.

Пример

Этот образец Visual Basic инициализирует MWComUtil с текущим экземпляром Excel. Глобальная переменная типа Object названный MCLUtil содержит экземпляр MWUtil класс и другая глобальная переменная типа Boolean названный bModuleInitialized сохраняет статус процесса инициализации. Частная подпрограмма InitModule() создает экземпляр MWComUtil класс и вызывает MWInitApplication метод с аргументом Application. После успешного выполнения этой функции все последующие вызовы завершаются без повторного создания объекта.

Dim MCLUtil As Object
Dim bModuleInitialized As Boolean

Private Sub InitModule()
    If Not bModuleInitialized Then
        On Error GoTo Handle_Error
        If MCLUtil Is Nothing Then
            Set MCLUtil = CreateObject("MWComUtil.MWUtil")
        End If
        Call MCLUtil.MWInitApplication(Application)
        bModuleInitialized = True
        Exit Sub
Handle_Error:
        bModuleInitialized = False
    End If
End Sub

Примечание

При одновременной разработке нескольких версий MATLAB и MWComUtil.dll, например, используя следующий синтаксис:

Set MCLUtil = CreateObject("MWComUtil.MWUtil")
требует перекомпиляции COM-модулей при каждом обновлении. Чтобы избежать этого, позвоните в MWUtil специфичный для версии модуля, например:
Set MCLUtil = CreateObject("MWComUtil.MWUtilx.x")
где x.x - конкретный номер версии.

Sub MWInitStartWireMCROptions (объект pApp As, [mcrOpityList])

Запустите среду выполнения MATLAB с параметрами среды выполнения MATLAB. Аналогично mclInitializeApplication (MATLAB Compiler SDK).

Параметры

АргументНапечататьОписание

pApp

Object

Допустимая ссылка только при вызове из приложения Excel

Не COM-клиенты Excel проходят Empty.

Возвращаемое значение

Ничего.

Замечания

Вызовите эту функцию для передачи параметров среды выполнения MATLAB (nojvm, logfileи т.д.). Вызовите эту функцию один раз для каждого процесса.

Пример

Этот образец Visual Basic инициализирует MWComUtil с текущим экземпляром Excel. Глобальная переменная типа Object названный MCLUtil содержит экземпляр MWUtil класс и другая глобальная переменная типа Boolean названный bModuleInitialized сохраняет статус процесса инициализации. Частная подпрограмма InitModule() создает экземпляр MWComUtil класс и вызывает MWInitApplicationWithMCROptions метод с аргументом Application и строковый массив, содержащий опции. После успешного выполнения этой функции все последующие вызовы завершаются без повторного создания объекта. После успешного выполнения этой функции среда выполнения MATLAB запускается без JVM™ и файла журнала logfile.txt.

Dim MCLUtil As Object
Dim bModuleInitialized As Boolean

Private Sub InitModule()
    If Not bModuleInitialized Then
        On Error GoTo Handle_Error
        If MCLUtil Is Nothing Then
            Set MCLUtil = CreateObject("MWComUtil.MWUtil")
        End If
			 Dim mcrOptions(1 To 3) as String
			 mcrOptions(1) = "-nojvm"
			 mcrOptions(2) = "-logfile"
			 mcrOptions(3) = "logfile.txt"
        Call MCLUtil.MWInitApplicationWithMCROptions(Application, mcrOptions)
        bModuleInitialized = True
        Exit Sub
Handle_Error:
        bModuleInitialized = False
    End If
End Sub

Примечание

Если вы не используете Excel, передайте Nothing вместо Application кому MWInitApplicationWithMCROptions.

Функция IsMCRJVMEnabled () как логическая

Прибыль true при запуске среды выполнения MATLAB с JVM; в противном случае возвращает false.

Параметры

Ничего.

Возвращаемое значение

Boolean

Функция IsMCRInitialized () как логическая

Прибыль true если инициализирована среда выполнения MATLAB; в противном случае возвращает false

Параметры

Ничего.

Возвращаемое значение

Boolean

Sub MWPack (pVarArg, [Var0], [Var1],..., [Var31])

Упаковывает список переменной длины Variant аргументы в один Variant массив. Эта функция обычно используется для создания varargin ячейка из списка отдельных входов. Каждый вход в списке добавляется в массив, только если он не пуст или отсутствует. (В Visual Basic отсутствующий параметр обозначается Variant тип vbError со значением &H80020004.)

Параметры

АргументНапечататьОписание

pVarArg

Variant

Получает результирующий массив

[Var0], [Var1], ...

Variant

Необязательный список Variants для упаковки в массив. Можно передать от 0 до 32 аргументов.

Возвращаемое значение

Ничего.

Замечания

Эта функция всегда освобождает содержимое pVarArg перед обработкой списка.

Пример

В этом примере используется MWPack в функции формулы для создания varargin ячейка для передачи в качестве входного параметра методу, скомпилированному из функции MATLAB с сигнатурой

function y = mysum(varargin)
    y = sum([varargin{:}]);

Функция возвращает сумму элементов в varargin. Предположим, что эта функция является методом класса с именем myclass который включен в компонент с именем mycomponent с версией 1.0. Функция Visual Basic допускает до 10 входов и возвращает результат y. При возникновении ошибки функция возвращает сообщение об ошибке. Эта функция предполагает, что MWInitApplication ранее был вызван.

Function mysum(Optional V0 As Variant, _
               Optional V1 As Variant, _
               Optional V2 As Variant, _
               Optional V3 As Variant, _
               Optional V4 As Variant, _
               Optional V5 As Variant, _
               Optional V6 As Variant, _
               Optional V7 As Variant, _
               Optional V8 As Variant, _
               Optional V9 As Variant) As Variant
Dim y As Variant
Dim varargin As Variant
Dim aClass As Object
Dim aUtil As Object
    
    On Error Goto Handle_Error
    Set aClass = CreateObject("mycomponent.myclass.1_0")
    Set aUtil = CreateObject("MWComUtil.MWUtil")
    Call aUtil.MWPack(varargin,V0,V1,V2,V3,V4,V5,V6,V7,V8,V9)
    Call aClass.mysum(1, y, varargin)
    mysum = y
    Exit Function
Handle_Error:
    mysum = Err.Description
End Function

Sub MWUnpack (VarArg, [nStartAt As Long], [bAutoResize As Boolean = False], [pVar0], [pVar1],..., [pVar31])

Распаковка массива Variants в индивидуальный Variant аргументы. Эта функция обеспечивает обратную функциональность MWPack и обычно используется для обработки varargout ячейка в индивидуальную Variants.

Параметры

АргументНапечататьОписание

VarArg

Variant

Входной массив Variants для обработки

nStartAt

Long

Необязательный начальный индекс (на основе нуля) в массиве для начала обработки. По умолчанию = 0.

bAutoResize

Boolean

Необязательный флаг автоматического изменения размера. Если этот флаг True, любые выходные аргументы диапазона Excel изменяются в соответствии с размерами Variant для копирования. Процесс изменения размера применяется относительно верхнего левого угла указанного диапазона. По умолчанию = False.

[pVar0],[pVar1], ...

Variant

Необязательный список Variants для получения элементов массива, содержащихся в VarArg. Можно передать от 0 до 32 аргументов.

Возвращаемое значение

Ничего.

Замечания

Эта функция может обрабатывать Variant массив в одном вызове или через несколько вызовов с использованием nStartAt параметр.

Пример

В этом примере используется MWUnpack для обработки varargout в несколько диапазонов Excel при автоматическом изменении размера каждого диапазона. varargout параметр предоставляется из метода, скомпилированного из функции MATLAB.

function varargout = randvectors
    for i=1:nargout
        varargout{i} = rand(i,1);
    end

Эта функция создает последовательность nargout случайные векторы столбцов с длиной i-го вектора, равной i. Предположим, что эта функция включена в класс с именем myclass который включен в компонент с именем mycomponent с версией 1.0. Подпрограмма Visual Basic не принимает аргументов и помещает результаты в столбцы Excel, начиная с A1, B1, C1 и D1. При возникновении ошибки в окне сообщения отображается текст ошибки. Эта функция предполагает, что MWInitApplication ранее был вызван.

Sub GenVectors()
    Dim aClass As Object
    Dim aUtil As Object
    Dim v As Variant
    Dim R1 As Range
    Dim R2 As Range
    Dim R3 As Range
    Dim R4 As Range
    
    On Error GoTo Handle_Error
    Set aClass = CreateObject("mycomponent.myclass.1_0")
    Set aUtil = CreateObject("MWComUtil.MWUtil")
    Set R1 = Range("A1")
    Set R2 = Range("B1")
    Set R3 = Range("C1")
    Set R4 = Range("D1")
    Call aClass.randvectors(4, v)
    Call aUtil.MWUnpack(v,0,True,R1,R2,R3,R4)
    Exit Sub
Handle_Error:
    MsgBox (Err.Description)
End Sub

Sub MWDate2VariantDate (pVar

)

Преобразует даты вывода из MATLAB в Variant даты.

Параметры

АргументНапечататьОписание

pVar

Variant

Variant для преобразования

Возвращаемое значение

Ничего.

Замечания

MATLAB обрабатывает даты как числа с плавающей запятой двойной точности с 0,0, что соответствует 0/0/00 00:00:00. По умолчанию числовые даты, являющиеся выходными параметрами скомпилированных функций MATLAB, передаются как Doubles, которые должны быть уменьшены смещением даты COM, а также принуждены к датам COM. MWDate2VariantDate способ выполняет это преобразование и дополнительно преобразует даты в виде символьного вектора в типы дат COM.

Пример

В этом примере используется MWDate2VariantDate для обработки числовых дат, возвращенных методом, скомпилированным из следующей функции MATLAB.

function x = getdates(n, inc)
    y = now;
    for i=1:n
        x(i,1) = y + (i-1)*inc;
    end

Эта функция создает n- вектор столбца длины числовых значений, представляющих даты, начинающиеся с текущей даты и времени, с каждым элементом, увеличенным на inc дней. Предположим, что эта функция включена в класс с именем myclass который включен в компонент с именем mycomponent с версией 1.0. Подпрограмма принимает диапазон Excel и Double в качестве входных данных и помещает сгенерированные даты в предоставленный диапазон. При возникновении ошибки в окне сообщения отображается текст ошибки. Эта функция предполагает, что MWInitApplication ранее был вызван.

Sub GenDates(R As Range, inc As Double)
    Dim aClass As Object
    Dim aUtil As Object
    
    On Error GoTo Handle_Error
    Set aClass = CreateObject("mycomponent.myclass.1_0")
    Set aUtil = CreateObject("MWComUtil.MWUtil")
    Call aClass.getdates(1, R, R.Rows.Count, inc)
    Call aUtil.MWDate2VariantDate(R)
    Exit Sub
Handle_Error:
    MsgBox (Err.Description)
End Sub