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"));

 

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