Распределите приложение Visual Basic

Вызов скомпилированных функций MATLAB от Microsoft Excel

Для того, чтобы вызвать скомпилированные функции MATLAB® из электронной таблицы Microsoft® Excel®, выполните следование из машин Разработки и Развертывания, как задано.

Примечание

Для функции, которая будет названа с помощью синтаксиса функций Microsoft Excel (=myfunction(input)), функция MATLAB должна возвратить один скалярный выходной аргумент.

Выполните следующие шаги на машине Разработки:

  1. Создайте следующие функции MATLAB в трех отдельных файлах с именем doubleit.m, incrementit.m, и powerit.m, соответственно:

     function output = doubleit(input)
       output = input * 2;
    function output = incrementit(input1, input2)
       output = input1 + input2;
     function output = powerit(input1, input2)
       output = power(input1, input2);
    
  2. Запустите Library Compiler.

  3. Используйте следующую информацию, когда вы работаете через этот пример с помощью инструкций в Create Дополнение Excel из MATLAB:

    Имя приложенияmyexcelfunctions
    ClassName myexcelfunctionsclass
    Экспортируемые функции

    doubleit.m incrementit.m powerit.m

Выполните следующие шаги на машине Развертывания:

  1. Скопируйте содержимое for_redistribution_files_only к машине (машинам) развертывания. Скопируйте файл в стандартное место для использования с Microsoft Excel, таким как Office_Installation_folder\Library\MATLAB где Office_Installation_folder папка, такая как C:\Program Files\Microsoft Office\OFFICE11.

  2. Установите и сконфигурируйте MATLAB Runtime.

  3. Укажите myexcelfunctions_1_0.dll.

    Внимание

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

  4. Запустите Microsoft Excel. Электронная таблица Book1 должно быть открыто по умолчанию.

  5. В Excel, select Tools > Visual Basic Editor. Редактор Microsoft Visual Basic® запускается.

  6. В Редакторе Microsoft Visual Basic выберите File > Import File.

  7. Просмотрите к myexcelfunctions.bas и нажмите Open. В Проводнике Проекта Module1 появляется под узлом Modules ниже VBAProject (Book1).

  8. В Редакторе Microsoft Visual Basic выберите View > Microsoft Excel. Можно теперь использовать doubleit, incrementit, и powerit функции в вашей электронной таблице Book1.

  9. Протестируйте функции путем выполнения следующего:

    1. Введите =doubleit(2.5) в ячейке A1.

    2. Введите =incrementit(11,17) в ячейке A2.

    3. Введите =powerit(7,2) в ячейке A3.

    Необходимо видеть значения 5, 28 и 49 в ячейках A1, A2 и A3 соответственно.

  10. Использовать doubleit, powerit, и incrementit функции во всех ваших новых электронных таблицах Microsoft Excel, сделайте следующее:

    1. Выберите File > Save As.

    2. Измените опцию Save as type в .xlt (Template).

    3. Просмотрите к Office_Installation_folder\XLSTART папка.

    4. Сохраните файл как Office_Installation_folder\XLSTART\Book.xlt.

    Примечание

    Ваш уровень Безопасности макросов Microsoft Excel должен собираться в Medium или Low сохранить этот шаблон.

Где пример кода?

Для получения дополнительной информации о доступе к примеру кода из продукта, смотрите, что Файл В качестве примера Копирует.

Улучшите доступ к данным Используя пользовательский интерфейс данных MATLAB Runtime и COM-компоненты

Обзор

Эта функция обеспечивает легкий интерфейс для того, чтобы легко получить доступ к данным MATLAB Runtime. Это позволяет данным быть совместно использованными экземпляром MATLAB Runtime, код MATLAB, работающий на этом MATLAB Runtime, и кодом обертки, который создал MATLAB Runtime. Через вызовы API интерфейса MATLAB Runtime User Data вы получаете доступ к данным MATLAB Runtime путем создания на ассоциативный массив экземпляра MATLAB Runtime mxArrays, состоя из отображения от строковых ключей до mxArray значения. Причины того, чтобы сделать это включают, но не ограничиваются:

  • Необходимо предоставить информацию профиля во время выполнения клиенту, запускающему приложение, созданное с Parallel Computing Toolbox™. Информация профиля может быть предоставлена (и изменение) на базисе на выполнение. Например, два экземпляра того же приложения могут запуститься одновременно с различными профилями.

  • Вы хотите инициализировать MATLAB Runtime постоянными значениями, к которым могут получить доступ все ваши приложения MATLAB.

  • Вы хотите настроить глобальную рабочую область — глобальная переменная или переменные, к которым могут получить доступ MATLAB и ваш клиент.

  • Вы хотите сохранить состояние любой переменной или группу переменных.

MATLAB Compiler™ поддерживает на доступ к состоянию экземпляра MATLAB Runtime через объектно-ориентированный API. В отличие от MATLAB Compiler, доступ к на состояние экземпляра MATLAB Runtime является дополнительным, а не на по умолчанию. Можно получить доступ к этому состоянию путем добавления setmcruserdata.m и getmcruserdata.m к вашему проекту развертывания или путем определения их на командной строке. Альтернативно, вы используете функцию помощника, чтобы вызвать эти методы, как показано в Предоставляют информацию Профиля Во время выполнения для Приложений Parallel Computing Toolbox.

Для получения дополнительной информации см. Руководство пользователя MATLAB Compiler.

Предоставьте информацию профиля времени выполнения для приложений Parallel Computing Toolbox

Следующее является полным примером того, как можно использовать Пользовательский Интерфейс Данных MATLAB Runtime в качестве механизма, чтобы задать профиль для приложений Parallel Computing Toolbox.

Примечание

Независимые исполняемые файлы и совместно использованные библиотеки, сгенерированные от MATLAB Compiler или MATLAB Compiler SDK™ для параллельных приложений, могут теперь запустить до двенадцати локальных рабочих без MATLAB Parallel Server™.

Шаг 1: запишите свой код Parallel Computing Toolbox

  1. Скомпилируйте sample_pct.m в MATLAB.

    Этот пример кода использует кластер, заданный в профиле по умолчанию.

    Выход принимает, что профилем по умолчанию является local.

    function speedup = sample_pct (n)
    warning off all;
    tic
    if(ischar(n))
        n=str2double(n);
    end
    for ii = 1:n
       (cov(sin(magic(n)+rand(n,n))));
    end
    time1 =toc;
    parpool;
    tic
    parfor ii = 1:n
       (cov(sin(magic(n)+rand(n,n))));
    end
    time2 =toc;
    disp(['Normal loop times: ' num2str(time1) ...
        ',parallel loop time: ' num2str(time2) ]);
    disp(['parallel speedup:  ' num2str(1/(time2/time1)) ...
        ' times faster than normal']);
    delete(gcp);
    disp('done');
    speedup = (time1/time2);
    
  2. Запустите код можно следующим образом после изменения профиля по умолчанию к local, в случае необходимости.

    a = sample_pct(200)

  3. Проверьте, что вы получаете следующие результаты:

    Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers.
    Normal loop times: 0.7587,parallel loop time: 2.9988
    parallel speedup:  0.253 times faster than normal
    Parallel pool using the 'local' profile is shutting down.
    done
    
    a =
    
        0.2530

Шаг 2: Установите Профиль Parallel Computing Toolbox.  Для того, чтобы скомпилировать код MATLAB к COM-компоненту и использовать Parallel Computing Toolbox, mcruserdata должен быть установлен непосредственно из MATLAB. Нет никакого API, доступного, чтобы получить доступ к MCRUserdata как существует для C и приложений C++, созданных с MATLAB Compiler.

Установить mcruserdata из MATLAB создайте init функционируйте в своем COM-классе. Это - отдельная функция MATLAB, которая использует setmcruserdata установить профиль Parallel Computing Toolbox однажды. Вы затем вызываете свои другие функции, чтобы использовать функции Parallel Computing Toolbox.

Создайте следующий init функция:

function init_sample_pct
% Set the Parallel Profile:
if(isdeployed)
    [profile] = uigetfile('*.settings'); 
                          % let the USER select file
    setmcruserdata('ParallelProfile',[profile]);
end

Шаг 3: Скомпилируйте Свою Функцию с Deploytool или Командной строкой.  Можно скомпилировать функцию из командной строки путем ввода следующего:

mcc -B 'cexcel:exPctComp,exPctClass,1.0' init_sample_pct.m sample_pct.m

Альтернативно, можно использовать deploytool можно следующим образом:

  1. Выполните шаги в Create Дополнение Excel из MATLAB, чтобы скомпилировать ваше приложение.

    Когда компиляция заканчивается, новая папка (с тем же именем как проект) создается.

    Название проектаexPctComp
    ClassName exPctClass
    Файл, чтобы скомпилировать sample_pct.m и init_sample_pct.m

    Примечание

    Если вы используете функцию графического процессора Parallel Computing Toolbox, необходимо вручную добавить файлы CU и PTX.

    Если вы используете приложение Library Compiler, нажмите Add files/directories на вкладке Build.

    Если вы используете mcc команда, используйте -a опция.

  2. Чтобы развернуть скомпилированное приложение, скопируйте for_redistribution_files_only папка, которая содержит следующее вашим конечным пользователям.

    • exPctComp.dll

    • Модуль VBA (.bas файл)

    • Инсталлятор MATLAB Runtime

    • Кластерный профиль

    Примечание

    Целевая машина конечного пользователя должна иметь доступ к кластеру.

Шаг 4: Измените сгенерированное Приложение Драйвера VBA (Файл BAS).  После регистрации COM DLL на машине развертывания и импорте файла BAS в Excel, измените сгенерированный код файла BAS по мере необходимости.

Dim MCLUtil As Object
Dim bModuleInitialized As Boolean
Dim exPctClass As Object
 
Private Sub InitModule()
  If Not bModuleInitialized Then
    On Error GoTo Handle_Error
    If MCLUtil Is Nothing Then
      Set MCLUtil = CreateObject("MWComUtil.MWUtil7.10")
    End If
    Call MCLUtil.MWInitApplication(Application)
    bModuleInitialized = True
    Exit Sub
Handle_Error:
    bModuleInitialized = False
  End If
End Sub
 
Function init_sample_pct() As Variant
 
  On Error GoTo Handle_Error
  Call InitModule
  If exPctClass Is Nothing Then
    Set exPctClass = CreateObject("exPctComp.exPctClass.1_0")
  End If
  Call exPctClass.init_sample_pct
  init_sample_pct = Empty
 
  Exit Function
Handle_Error:
  init_sample_pct = "Error in " & 
                         Err.Source & ": " & Err.Description
End Function
 
 
Function sample_pct(Optional pelle As Variant) As Variant
  Dim speedup As Variant
 
  On Error GoTo Handle_Error
  Call InitModule
  If exPctClass Is Nothing Then
    Set exPctClass = CreateObject("exPctComp.exPctClass.1_0")
  End If
  Call exPctClass.sample_pct(1, speedup, pelle)
  sample_pct = speedup
 
  Exit Function
Handle_Error:
  sample_pct = "Error in " & Err.Source 
                         & ": " & Err.Description
End Function

Выход следующие:

Кэш компонента MATLAB Runtime и развертываемое архивное встраивание

развертываемые архивные данные автоматически встроены непосредственно в компонентах MATLAB Compiler по умолчанию и извлечены к временной папке.

Автоматическое встраивание включает использование функций Кэша Компонента MATLAB Runtime через переменные окружения.

Эти переменные позволяют вам задавать следующее:

  • Задайте местоположение по умолчанию, где вы хотите, чтобы развертываемый архив был автоматически извлечен

  • Добавьте диагностические ошибочные параметры печати, которые могут использоваться, автоматически извлекая развертываемое для поиска и устранения неисправностей целей

  • Настройка размера кэша компонента MATLAB Runtime по причинам эффективности.

Используйте следующие переменные окружения, чтобы изменить эти настройки.

Переменная окруженияЦельПримечания
MCR_CACHE_ROOTКогда установлено в местоположение того, где вы хотите, чтобы развертываемый архив был извлечен, эта переменная заменяет местоположение кэша компонента в расчете на пользователя по умолчанию. Это верно для встроенного .ctf файлы только.На macOS эта переменная проигнорирована в MATLAB R2020a и позже. Комплект приложений содержит файлы, необходимые для времени выполнения.
MCR_CACHE_SIZEКогда установлено, эта переменная заменяет размер кэша компонента по умолчанию.Начальный предел для этой переменной 32M (мегабайты). Это может, однако, быть изменено после того, как вы установили переменную в первый раз. Отредактируйте файл .max_size, который находится в файле, определяемом путем выполнения mcrcachedir команда, с желаемым пределом размера кэша.

Можно заменить это автоматическое встраивание и поведение экстракции путем компиляции с -C опция. Смотрите Переопределяющее Поведение По умолчанию для деталей.

Примечание

Если при запуске mcc задавая конфликтную обертку и целевые типы, развертываемый архив не будет встроен на сгенерированный компонент. Например, если вы запускаетесь:

mcc -W lib:myLib -T link:exe test.m test.c
сгенерированный test.exe не будет иметь развертываемого архива встроенным в него, как будто вы задали -C опция к командной строке.

Внимание

Не извлекайте файлы в the.ctf файл и размещает их индивидуально под системой контроля версий. Начиная с .ctf файл содержит взаимозависимые функции MATLAB и данные, к файлам в нем нужно получить доступ только путем доступа к .ctf файл. Для лучших результатов поместите целый .ctf файл под системой контроля версий.

Переопределяющее поведение по умолчанию

Извлекать развертываемый архив способом до R2008b, вместе со скомпилированным COM-компонентом, компиляция с помощью mcc -c опция.

Можно также реализовать это переопределение путем добавления -c отметьте в разделе Settings приложения компилятора.

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

Для получения дополнительной информации

Для получения дополнительной информации о развертываемом архиве, смотрите Развертываемый Архив.

Опции MATLAB Runtime

Какие Опции MATLAB Runtime поддерживаются MATLAB Compiler ?

  • -logfile — Создает именованный файл журнала.

Как задайте опции MATLAB Runtime?

Если Вы Скомпилировали Дополнение в MATLAB или использовали MCC.  Если вы создаете свое дополнение с помощью Library Compiler MATLAB, выберите Create log file под Additional Runtime Settings.

Если вы создаете свое дополнение с помощью mcc, просто задайте -logfile с mcc -R команда

Если Вы Создали Функцию С нуля Используя Функциональный Мастер.  Если бы вы создали функцию с нуля с помощью Функционального Мастера, и хотят задать опции MATLAB Runtime, необходимо вручную изменить .bas код файла.

Вы делаете это путем вызова следующего MWUtil Вызовы API, детализированные с примерами в Классе MWUtil:

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