Чтобы использовать один или несколько, 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 с необходимой информации, чтобы выполнить код в том архиве. Функцию инициализации библиотеки называют
. Эта функция возвращает булев код статуса.libnameInitialize()
На Windows®, если вы хотите сделать, чтобы ваша разделяемая библиотека вызвала MATLAB, совместно использовал библиотеку, функция инициализации библиотеки MATLAB (например, <libname>Initialize, <libname>Terminate, mclInitialize, mclTerminate
) не может быть вызвана от вашей разделяемой библиотеки во время вызова DllMain(DLL_ATTACH_PROCESS)
. Это применяется, или ли совместно использованная библиотека промежуточного звена неявно явным образом загружена. Поместите вызов после DllMain()
.
Вызовите функции в библиотеке и обработайте результаты. (Это - основная часть программы.)
Если ваши окна фигуры MATLAB отображений приложения драйвера, включайте вызов mclWaitForFiguresToDie
прежде, чем вызвать функции Terminate
и mclTerminateApplication
в выполняющем двух шагов.
Когда для вашего приложения больше не будет нужна данная библиотека, вызовите функцию завершения для библиотеки.
Оконечная функция освобождает ресурсы, сопоставленные с экземпляром MATLAB Runtime библиотеки. Функцию завершения библиотеки называют
. Если библиотека была отключена, функции, экспортируемые библиотекой, не могут быть вызваны снова в приложении.libnameTerminate()
При издавании приказа <lib>Initialize
после того, как вызов <lib>Terminate
(является ли библиотека тем же самым) вызывает непредсказуемые результаты.
Когда ваше приложение больше не должно будет вызывать разделяемые библиотеки, вызовите API-функцию mclTerminateApplication
.
Эта функция освобождает ресурсы уровня приложения, используемые MATLAB Runtime. Если вы вызываете эту функцию, никакие дальнейшие вызовы не могут быть выполнены к разделяемым библиотекам в приложении.
Очистите переменные, близкие файлы и выход.
Следующий пример от matrix.c
иллюстрирует все перечисленные выше шаги.
Вызовите C разделяемая библиотека из вашего приложения драйвера C
loadlibrary
Вы не можете использовать функцию MATLAB, loadlibrary
в MATLAB, чтобы загрузить C совместно использовал библиотеку, созданную с MATLAB Compiler SDK.
Для получения дополнительной информации об использовании loadlibrary
смотрите Вызов Разделяемые Библиотеки в Развертываемых приложениях (MATLAB Compiler).
mclInitializeApplication
| mclRunMain
| mclTerminateApplication
| mclWaitForFiguresToDie
| mclmcrInitialize