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