sqlite3 extension-function windows 编译调用

extension-function.c本身不支持windows下编译,如果在windows下编译,需要对官方文件进行修改

 

1. 修改extension-function.

将官方文件的(1837行)

#ifdef COMPILE_SQLITE_EXTENSIONS_AS_LOADABLE_MODULE
int sqlite3_extension_init(
    sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi){
  SQLITE_EXTENSION_INIT2(pApi);
  RegisterExtensionFunctions(db);
  return 0;
}
#endif /* COMPILE_SQLITE_EXTENSIONS_AS_LOADABLE_MODULE */

替换为

#ifdef COMPILE_SQLITE_EXTENSIONS_AS_LOADABLE_MODULE
#ifdef _WIN32
__declspec(dllexport)
#endif
int sqlite3_extension_init(
    sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi){
  SQLITE_EXTENSION_INIT2(pApi);
  RegisterExtensionFunctions(db);
  return 0;
}
#endif /* COMPILE_SQLITE_EXTENSIONS_AS_LOADABLE_MODULE */

 

2.编译dll
使用visual studio 32位本机命令行工具执行 cl extension-functions.c -link -dll -out:sqlite3_ext_func32.dll

使用visual studio 64位本机命令行工具执行 cl extension-functions.c -link -dll -out:sqlite3_ext_func64.dll

3.调用
//打开数据库
sqlite3 *db;
sqlite3_open("xxx", &db);
//允许sqlite加载扩展
sqlite3_db_config(db, SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION , 1, NULL);
//加载扩展
int ret = sqlite3_load_extension(db, "sqlite3_ext_func64.dll", 0, 0);
if (ret != SQLITE_OK)
  OutputDebugString(_T("sqlite3_load_extension:sqlite3_ext_func64.dll fail!\n"));

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章