int sqlite3_auto_extension(void(*xEntryPoint)(void));
此接口会导致 xEntryPoint() 函数在创建每个新的数据库连接时被调用。 这里的意思是 xEntryPoint() 是静态链接的SQLite 扩展的入口点,该扩展将被自动加载到所有新的数据库连接中。
尽管函数原型显示 xEntryPoint() 不接受任何参数并返回 void,但 SQLite 会使用三个参数调用 xEntryPoint() 并期望一个整型结果,就好像入口点的签名如下所示
int xEntryPoint( sqlite3 *db, const char **pzErrMsg, const struct sqlite3_api_routines *pThunk );
如果 xEntryPoint 例程遇到错误,它应该让 *pzErrMsg 指向一个合适的错误消息(从sqlite3_mprintf() 获取),并返回一个合适的错误代码。 SQLite 确保在调用 xEntryPoint() 之前 *pzErrMsg 为 NULL。 SQLite 将在 xEntryPoint() 返回后对 *pzErrMsg 调用sqlite3_free()。 如果任何 xEntryPoint() 返回错误,则导致 xEntryPoint() 的sqlite3_open()、sqlite3_open16() 或sqlite3_open_v2() 调用将失败。
使用已在自动扩展列表中的入口点 X 调用 sqlite3_auto_extension(X) 是一种无害的无操作。 每个打开的数据库连接将不会调用超过一次入口点。
另请参阅:sqlite3_reset_auto_extension() 和sqlite3_cancel_auto_extension()