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()获得),并返回适当的错误代码。在调用xEntryPoint()之前,SQLite确保* pzErrMsg为NULL。xEntryPoint()返回后,SQLite将在* 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()