主要内容

本页采用了机器翻译。点击此处可查看英文原文。

matlab::cpplib::initMATLAB 库

初始化可部署存档文件中打包的 MATLAB 函数库

描述

std::unique_ptr<MATLABLibrary> initMATLABLibrary(std::shared_ptr<MATLABApplication> application, const std::u16string & ctfPath)

std::unique_ptr<MATLABLibrary> initMATLABLibrary(std::shared_ptr<MATLABApplication> application, const std::u16string & ctfPath, const std::u16string& session_key = std::u16string())

initMATLABLibrary 函数用于初始化打包在可部署存档文件(.ctf 文件)中的 MATLAB® 函数库,并返回指向该库的唯一指针。它需要一个指向 MATLABApplication 实例的共享指针以及存档文件的路径。您可以选择提供一个 64 字节的十六进制编码 AES 解密密钥,作为解密该库的选项。

可部署存档的路径可以是相对的,也可以是绝对的。如果路径是相对的,则按照下面指定的顺序添加以下路径,直到找到文件或用尽所有可能性。

  1. 如果环境变量 CPPSHARED_BASE_CTF_PATH 已定义,则其值是。

  2. 工作文件夹。

  3. 可执行文件所在的文件夹。

  4. macOS 系统中,位于可执行文件所在位置上方三级的文件夹。

如果找到了该库,则对其进行初始化,并返回一个指针。否则该函数将抛出异常。

生命周期和实例管理

initMATLABLibrary 函数对库实例的管理方式与基于旧版 mwArray API 的共享库目标不同。在使用 mwArray API 的版本中,单个进程内针对同一组件的多次初始化调用通常会共享一个 MATLAB Runtime 的进程内实例。

当您使用 MATLAB Data API (C++11) 时,每次调用 initMATLABLibrary 都会创建一个独立的库实例。该实例由返回的 std::unique_ptr<MATLABLibrary> 智能指针拥有,当该指针超出作用域时,该指针会自动处理库的清理和终止工作。虽然这种设计能更好地隔离各个组件,但也意味着开发者必须决定在何处定义指针的作用域,以确保在预期使用期间库始终可用。若要复现 mwArray API 的传统行为(即每个组件仅存在一个实例),您应仅初始化该库一次,并在整个应用程序中共享生成的指针。

参数

std::shared_ptr<MATLABApplication> application

指向从 MATLABApplication 返回的 initMATLABApplication 对象的指针。

const std::u16string & ctfPath

存档文件的相对路径或绝对路径。

const std::u16string& session_key = std::u16string()

AES 解密密钥,指定为具有 64 字节文件大小的十六进制编码 AES 密钥。

有关详细信息,请参阅 mcc -k

返回值

std::unique_ptr<MATLABLibrary>

指向 MATLABLibrary 对象的指针,用于调用库中的函数、feval 等。

异常

matlab::cpplib::LibNotFound

在共享库路径上未找到具有给定名称的库。

matlab::cpplib::LibInitErr

无法初始化库。

示例

初始化 MATLABLibrary

std::vector<std::u16string> opts = {u"-nojvm"};
auto matlabPtr = initMATLABApplication(MATLABApplicationMode::IN_PROCESS, opts);
auto libAstro = initMATLABLibrary(matlabPtr, convertUTF8StringToUTF16String("astro.ctf"));

版本历史记录

在 R2018a 中推出