Как использовать один или несколько MATLAB® Compiler SDK™ сгенерированные на C общие библиотеки в вашем приложении на C:
Включите сгенерированный заголовочный файл для каждой библиотеки в приложение.
Каждая сгенерированная общая библиотека имеет связанный заголовочный файл с именем
.libname
.h
Инициализируйте слой прокси MATLAB Runtime путем вызова mclmcrInitialize
.
Использовать mclRunMain
чтобы вызвать функцию C в коде драйвера, которая использует сгенерированные MATLAB общие библиотеки.
mclRunMain()
предоставляет удобный кросс-платформенный механизм для переноса выполнения кода MATLAB в общую библиотеку.
Внимание
Не используйте mclRunMain()
на Mac, если ваше приложение создает своё собственное полное графическое окружение.
Объявить переменные и обработать входные параметры.
Инициализируйте MATLAB Runtime путем вызова mclInitializeApplication
функция. Эта функция устанавливает глобальное состояние MATLAB Runtime и включает конструкцию образцов MATLAB Runtime.
Вызовите mclInitializeApplication()
функция один раз на приложение. Его необходимо вызвать перед любыми другими функциями MATLAB API. Вы можете передать опции уровня приложения этой функции. mclInitializeApplication()
возвращает логический код состояния.
Внимание
Избегайте выдачи cd
команды из приложения драйвера перед вызовом mclInitializeApplication
. Отказ для этого может вызвать отказ в MATLAB Runtime инициализации.
Для каждой общей библиотеки C, включенной в приложение, вызовите функцию инициализации для библиотеки.
Функция инициализации выполняет библиотечно-локальную инициализацию. Он распаковывает развертываемый архив и запускает образец MATLAB Runtime с необходимой информацией для выполнения кода в этом архиве. Функция инициализации библиотеки называется
. Эта функция возвращает логический код состояния.libname
Инициализация ()
Примечание
В Windows®, если вы хотите, чтобы ваша общая библиотека вызвала общую библиотеку MATLAB, функция инициализации библиотеки MATLAB (например <libname>Initialize, <libname>Terminate, mclInitialize, mclTerminate
) не может быть вызван из общей библиотеки во время DllMain(DLL_ATTACH_PROCESS)
вызов. Это относится к тому, неявно или неявно загружена промежуточная общая библиотека. Поместите вызов после DllMain()
.
Активируйте функции в библиотеке и обрабатывайте результаты. (Это основная часть программы.)
Примечание
Если ваше приложение драйвера отображает графические окна MATLAB, включите вызов на mclWaitForFiguresToDie
перед вызовом Terminate
функции и mclTerminateApplication
в следующих двух шагах.
Когда вашему приложению больше не нужна указанная библиотека, вызовите функцию завершения для библиотеки.
Функция terminate освобождает ресурсы, сопоставленные с образцом MATLAB Runtime библиотеки. Функция разрыва библиотеки называется
. После завершения работы библиотеки функции, экспортированные библиотекой, не могут быть повторно вызваны в приложении.libname
Завершает ()
Внимание
Выдача <lib>Initialize
вызов после <lib>Terminate
вызов (является ли библиотека одной и той же) приводит к непредсказуемым результатам.
Когда вашему приложению больше не нужно вызывать какие-либо общие библиотеки, вызовите mclTerminateApplication
Функция API.
Эта функция освобождает ресурсы уровня приложения, используемые MATLAB Runtime. После вызова этой функции дальнейшие вызовы общих библиотек в приложении выполнить невозможно.
Очистка переменных, закрытие файлов и выход.
Следующий пример из matrix.c
иллюстрирует все вышеописанные шаги.
Вызов разделяемой библиотеки на С из приложения драйвера на С
loadlibrary
Вы не можете использовать функцию MATLAB loadlibrary
в MATLAB для загрузки общей библиотеки на C, созданной с помощью MATLAB Compiler SDK.
Для получения дополнительной информации об использовании loadlibrary
, см. Вызов общих библиотек в развернутых приложениях.
mclInitializeApplication
| mclmcrInitialize
| mclRunMain
| mclTerminateApplication
| mclWaitForFiguresToDie