И так, библиотеку скомпилировал с параметром SQLITE_THREADSAFE=1, библиотека многопоточность поддерживает.
Для того чтобы ей воспользоваться нужно открывать соединение через sqlite3_open_v2.
согласно документации:
int sqlite3_open_v2(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb, /* OUT: SQLite db handle */
int flags, /* Flags */
const char *zVfs /* Name of VFS module to use */
);
Используется 4 параметра при открытии соединения (на 2 больше чем при обычном sqlite3_open).
1) параметр имя_дб, 2) хендо_дб, 3) флаг (перечень примеров тут https://www.sqlite.org/c3ref/open.html), 4) - объект виртуальной файловой системы (можно не указывать (NULL)).
Далее:
так как мне требуется указать флаг
SQLITE_OPEN_NOMUTEX 0x00008000 /* Ok for sqlite3_open_v2() */ и не указывать VFS,то в я в файле hiDS_Sqlite3.pas
строку
sqlite3_open(PChar(CodePage1ToCodePage2(ReadString(_Data,_data_FileName, _prop_FileName), CP_ACP, CP_UTF8)), id);
меняю на:
sqlite3_open_v2(PChar(CodePage1ToCodePage2(ReadString(_Data,_data_FileName, _prop_FileName), CP_ACP, CP_UTF8)), id,8,nil); - где 8 - флаг, а nil -NULL (использовать объект VFS по умолчанию)
в файле sqlite3api.pas
строку
function sqlite3_open(dbname: PChar; var db:pointer):integer; cdecl;
меняю на:
function sqlite3_open_v2(dbname: PChar;var db:pointer;Flags:integer;VFSModuleChar):integer; cdecl; -где флаг integer (8), а объект VFS Pchar (nil)
строку
function sqlite3_open; asm pop ebp; jmp _sqlite3_open end;
меняю на:
function sqlite3_open_v2; asm pop ebp; jmp _sqlite3_open_v2 end;строку
function _sqlite3_open(dbname: PChar; var db:pointer):integer; cdecl; external;
меняю на:
function _sqlite3_open_v2(dbname: PChar;var db:pointer;Flags:integer;VFSModuleChar):integer; cdecl;Компилирую проект и получаю:
"C:\HiAsm\Elements\delphi\code\SqLite3Api.pas(104) Error: Unsatisfied forward or external declaration: 'sqlite3_open_v2'"
"C:\HiAsm\Elements\delphi\code\hiSQLite_DB.pas(5) Fatal: Could not compile used unit 'SqLite3Api.pas'"
Товарищи подскажите что делаю не так..