【发布时间】:2009-01-29 20:12:40
【问题描述】:
我正在使用 sqlite C API。
“一切”在主函数中运行(变量、打开、执行查询、关闭数据库等)
此外,我现在想在我做的地方创建单独的用户定义函数,例如,对数据库进行排序。
将 db 对象和变量从 main 传递到这个新函数的最佳方法是什么?将它们全部创建为全局变量?通过引用传递?这就是 Sqlite3_create_function 的用途吗?
如果需要,请告诉我如何澄清这个问题。
谢谢。
【问题讨论】:
我正在使用 sqlite C API。
“一切”在主函数中运行(变量、打开、执行查询、关闭数据库等)
此外,我现在想在我做的地方创建单独的用户定义函数,例如,对数据库进行排序。
将 db 对象和变量从 main 传递到这个新函数的最佳方法是什么?将它们全部创建为全局变量?通过引用传递?这就是 Sqlite3_create_function 的用途吗?
如果需要,请告诉我如何澄清这个问题。
谢谢。
【问题讨论】:
将 sqlite3 *db 指针作为参数传递给您的函数。
或者使用quickstart guide中看到的回调
【讨论】:
sqlite3_create_function 接受 void *pApp 参数。目的是 this 指向您的函数使用的数据。指针存储在 SQLite 托管函数上下文中。您可以使用sqlite3_user_data 从用户函数中获取此指针。由于您分配了内存,因此您可以在应用程序和函数之间共享它。
这种机制并不比使用全局变量难多少,而且如果您以后决定这样做,它还支持多线程应用程序。
【讨论】: