Для порядка скомпилированного MATLAB® функционирует из Microsoft® Excel® электронная таблица, выполните следующие действия с машин разработки и развертывания, как указано.
Примечание
Для порядка функции с помощью синтаксиса функции Microsoft Excel (=myfunction(input)), функция MATLAB должна вернуть один скалярный выходной аргумент.
Выполните следующие шаги на машине разработки:
Создайте следующие функции 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);
Запустите Library Compiler.
Используйте следующую информацию во время работы с этим примером, используя инструкции в разделе Создание надстройки Excel из MATLAB:
| Имя приложения | myexcelfunctions |
| Имя класса | myexcelfunctionsclass |
| Экспортированные функции |
|
Выполните следующие шаги на машине развертывания:
Скопируйте содержимое for_redistribution_files_only на машину (машины) развертывания. Скопируйте файл в стандартное место для использования с Microsoft Excel, например где Office_Installation_folder\ Библиотека\MATLABOffice_Installation_folder является папкой, такой как C:\Program Files\Microsoft Office\OFFICE11.
Регистрация myexcelfunctions_1_0.dll.
Внимание
Вам нужно перерегистрировать файл DLL, если вы перемещаете его после создания. В отличие от файлов DLL, файлы Excel могут быть перемещены куда угодно в любое время.
Запуск Microsoft Excel. Электронная таблица Book1 должен быть открыт по умолчанию.
В Excel выберите Tools > Visual Basic Editor. Microsoft Visual Basic® Запускается редактор.
В редакторе Microsoft Visual Basic выберите File > Import File.
Поиск myexcelfunctions.bas и нажмите Open. В Project Explorer Module1 появляется под узлом Modules под VBAProject (Book1).
В редакторе Microsoft Visual Basic выберите View > Microsoft Excel. Теперь можно использовать doubleit, incrementit, и powerit функционирует в Book1 электронной таблице.
Протестируйте функции, выполнив следующее:
Введите =doubleit(2.5) в камеру A1.
Введите =incrementit(11,17) в камеру A2.
Введите =powerit(7,2) в камеру A3.
Вы должны увидеть значения 5, 28 и 49 в камерах A1, A2 и A3 соответственно.
Как использовать doubleit, powerit, и incrementit во всех новых электронных таблицах Microsoft Excel выполните следующие действия:
Выберите File > Save As.
Измените опцию Save as type на .xlt (Template).
Перейдите к папка.Office_Installation_folder\ XLSTART
Сохраните файл следующим .Office_Installation_folder\ XLSTART\Book.xlt
Примечание
Чтобы сохранить этот шаблон, необходимо установить уровень безопасности макросов Microsoft Excel на Medium или Low.
Для получения дополнительной информации о доступе к коду примера из продукта, смотрите Пример копирования файла.
Эта функция обеспечивает легкий интерфейс для легкого доступа к данным MATLAB Runtime. Это позволяет совместно использовать данные между образцом MATLAB Runtime, кодом MATLAB, выполняемым на этом MATLAB Runtime, и кодом оболочки, который создал MATLAB Runtime. Посредством вызовов интерфейса MATLAB Runtime User Data API, вы получаете доступ к данным 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.
Ниже приведен полный пример использования интерфейса пользовательских данных MATLAB Runtime в качестве механизма определения профиля для приложений Parallel Computing Toolbox.
Примечание
Независимые исполняемые файлы и общие библиотеки, сгенерированные MATLAB Compiler или MATLAB Compiler SDK™ для параллельных приложений, теперь могут запускать до двенадцати локальных работников без MATLAB Parallel Server™.
Шаг 1: Напишите код Parallel Computing Toolbox
Скомпилируйте 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);
Запустите код следующим образом после изменения профиля по умолчанию на local, при необходимости.
a = sample_pct(200)
Проверьте, что вы получаете следующие результаты:
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. Для доступа к MCRUserdata нет доступного API как и для приложений на 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 следующим образом:
Чтобы скомпилировать приложение, выполните следующие действия в разделе Создание надстройки Excel из MATLAB.
Когда компиляция заканчивается, создается новая папка (с тем же именем, что и проект).
| Имя проекта | exPctComp |
| Имя класса | exPctClass |
| Файл для компиляции | sample_pct.m и init_sample_pct.m |
Примечание
Если вы используете функцию GPU Parallel Computing Toolbox, необходимо вручную добавить файлы PTX и CU.
Если вы используете приложение Library Compiler, нажмите Add files/directories на вкладке Build.
Если вы используете mcc команда, используйте -a опция.
Чтобы развернуть скомпилированное приложение, скопируйте 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 Compiler по умолчанию и извлекаются во временную папку.
Автоматическое встраивание позволяет использовать функции Кэш через переменные окружения.
Эти переменные позволяют вам задать следующее:
Определите расположение по умолчанию, где необходимо автоматически извлечь развертываемый архив
Добавьте опции печати диагностических ошибок, которые могут использоваться при автоматическом извлечении развертываемого файла в целях устранения неполадок
Настройка размера кэша компонента 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 опция в командной строке.
Внимание
Не извлекайте файлы из .ctf Файл и поместите их индивидуально под систему контроля версий. Начиная с .ctf файл содержит взаимозависимые функции MATLAB и данные, доступ к файлам в нем должен осуществляться только путем доступа к .ctf файл. Для достижения наилучших результатов разместите все .ctf файл под системой контроля версий.
Чтобы извлечь развертываемый архив способом до R2008b, вместе с скомпилированным COM- компонента, скомпилируйте с помощью mcc -c опция.
Вы также можете реализовать это переопределение, добавив -c флаг в Settings разделе приложения компилятора.
Можно хотеть использовать эту опцию для устранения проблем с развертываемым архивом, например, поскольку журналы и диагностические сообщения гораздо более видны.
Дополнительные сведения о развертываемом архиве см. в разделе Развертываемый архив.
-logfile - Создает именованный файл журнала.
Если Вы скомпилировали надстройку в MATLAB или использовали mcc. Если вы создаете надстройку с помощью MATLAB Library Compiler, выберите Create log file в разделе Additional Runtime Settings.
Если вы создаете надстройку с помощью mcc, просто задайте -logfile с mcc -R команда
Если вы создали функцию с нуля с помощью мастера функций. Если вы создали функцию с нуля с помощью Мастера функций и хотите задать опции MATLAB Runtime, необходимо вручную изменить .bas код файла.
Вы делаете это, вызывая следующее MWUtil Вызовы API, подробно описанные с примерами в Class MWUtil: