Вызов разделяемой библиотеки на С

Как использовать один или несколько MATLAB® Compiler SDK™ сгенерированные на C общие библиотеки в вашем приложении на C:

  1. Включите сгенерированный заголовочный файл для каждой библиотеки в приложение.

    Каждая сгенерированная общая библиотека имеет связанный заголовочный файл с именем libname.h.

  2. Инициализируйте слой прокси MATLAB Runtime путем вызова mclmcrInitialize.

  3. Использовать mclRunMain чтобы вызвать функцию C в коде драйвера, которая использует сгенерированные MATLAB общие библиотеки.

    mclRunMain() предоставляет удобный кросс-платформенный механизм для переноса выполнения кода MATLAB в общую библиотеку.

    Внимание

    Не используйте mclRunMain() на Mac, если ваше приложение создает своё собственное полное графическое окружение.

  4. Объявить переменные и обработать входные параметры.

  5. Инициализируйте MATLAB Runtime путем вызова mclInitializeApplication функция. Эта функция устанавливает глобальное состояние MATLAB Runtime и включает конструкцию образцов MATLAB Runtime.

    Вызовите mclInitializeApplication() функция один раз на приложение. Его необходимо вызвать перед любыми другими функциями MATLAB API. Вы можете передать опции уровня приложения этой функции. mclInitializeApplication() возвращает логический код состояния.

    Внимание

    Избегайте выдачи cd команды из приложения драйвера перед вызовом mclInitializeApplication. Отказ для этого может вызвать отказ в MATLAB Runtime инициализации.

  6. Для каждой общей библиотеки C, включенной в приложение, вызовите функцию инициализации для библиотеки.

    Функция инициализации выполняет библиотечно-локальную инициализацию. Он распаковывает развертываемый архив и запускает образец MATLAB Runtime с необходимой информацией для выполнения кода в этом архиве. Функция инициализации библиотеки называется libnameИнициализация (). Эта функция возвращает логический код состояния.

    Примечание

    В Windows®, если вы хотите, чтобы ваша общая библиотека вызвала общую библиотеку MATLAB, функция инициализации библиотеки MATLAB (например <libname>Initialize, <libname>Terminate, mclInitialize, mclTerminate) не может быть вызван из общей библиотеки во время DllMain(DLL_ATTACH_PROCESS) вызов. Это относится к тому, неявно или неявно загружена промежуточная общая библиотека. Поместите вызов после DllMain().

  7. Активируйте функции в библиотеке и обрабатывайте результаты. (Это основная часть программы.)

    Примечание

    Если ваше приложение драйвера отображает графические окна MATLAB, включите вызов на mclWaitForFiguresToDie перед вызовом Terminate функции и mclTerminateApplication в следующих двух шагах.

  8. Когда вашему приложению больше не нужна указанная библиотека, вызовите функцию завершения для библиотеки.

    Функция terminate освобождает ресурсы, сопоставленные с образцом MATLAB Runtime библиотеки. Функция разрыва библиотеки называется libnameЗавершает (). После завершения работы библиотеки функции, экспортированные библиотекой, не могут быть повторно вызваны в приложении.

    Внимание

    Выдача <lib>Initialize вызов после <lib>Terminate вызов (является ли библиотека одной и той же) приводит к непредсказуемым результатам.

  9. Когда вашему приложению больше не нужно вызывать какие-либо общие библиотеки, вызовите mclTerminateApplication Функция API.

    Эта функция освобождает ресурсы уровня приложения, используемые MATLAB Runtime. После вызова этой функции дальнейшие вызовы общих библиотек в приложении выполнить невозможно.

  10. Очистка переменных, закрытие файлов и выход.

Следующий пример из matrix.c иллюстрирует все вышеописанные шаги.

 Вызов разделяемой библиотеки на С из приложения драйвера на С

Ограничения при использовании функции MATLAB loadlibrary

Вы не можете использовать функцию MATLAB loadlibrary в MATLAB для загрузки общей библиотеки на C, созданной с помощью MATLAB Compiler SDK.

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

См. также

| | | |

Похожие темы