int sqlite3_load_extension( sqlite3 *db, /* Load the extension into this database connection */ const char *zFile, /* Name of the shared library containing extension */ const char *zProc, /* Entry point. Derived from zFile if 0 */ char **pzErrMsg /* Put error message here if not 0 */ );
此接口从指定文件加载 SQLite 扩展库。
sqlite3_load_extension() 接口尝试加载包含在文件 zFile 中的 SQLite 扩展 库。如果无法直接加载文件,将尝试使用各种操作系统特定的扩展进行加载。例如,如果无法加载“samplelib”,则可能还会尝试加载“samplelib.so”、“samplelib.dylib”或“samplelib.dll”等名称。
入口点为 zProc。zProc 可以为 0,在这种情况下,SQLite 将尝试自行找到一个入口点名称。它首先尝试“sqlite3_extension_init”。如果这不起作用,它将构建一个名称“sqlite3_X_init”,其中 X 由文件名从最后一个“/”到第一个“.”之间所有 ASCII 字母字符的对应小写字母组成,并省略任何初始的“lib”。sqlite3_load_extension() 接口在成功时返回 SQLITE_OK,如果出现错误则返回 SQLITE_ERROR。如果发生错误并且 pzErrMsg 不为 0,则 sqlite3_load_extension() 接口将尝试用从 sqlite3_malloc() 获取的内存中存储的错误消息文本填充 *pzErrMsg。调用函数应通过调用 sqlite3_free() 来释放此内存。
必须使用 sqlite3_enable_load_extension() 或 sqlite3_db_config(db,SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION,1,NULL) 在调用此 API 之前启用扩展加载,否则将返回错误。
安全警告:建议使用 SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 方法仅启用此接口。应避免使用 sqlite3_enable_load_extension() 接口。这将使 SQL 函数 load_extension() 保持禁用状态,并防止 SQL 注入使攻击者访问扩展加载功能。
另请参阅 load_extension() SQL 函数。