El comportamiento que mencionas es raro porque, usualmente,
el directorio de la aplicación tiene prioridad sobre cualquier otro directorio.
Como alternativa, lo único que se me ocurre es que coloques esta unidad en tu aplicación (pones la ruta adecuada en SQLite3DllLocation):
Código Delphi
[-]
unit SqliteLoader;
interface
implementation
uses ZPlainSqlite3, ZPlainLoader;
const
SQLite3DllLocation = 'c:\ruta\a\la\biblioteca\sqlite3.dll';
type
TZSQLiteNativeLibraryLoader = class(TZNativeLibraryLoader)
public
function Load: Boolean; override;
end;
function TZSQLiteNativeLibraryLoader.Load: Boolean;
begin
Result := inherited Load;
@sqlite_open := GetAddress('sqlite3_open');
@sqlite_close := GetAddress('sqlite3_close');
@sqlite_column_count := GetAddress('sqlite3_column_count');
@sqlite_column_bytes := GetAddress('sqlite3_column_text');
@sqlite_column_name := GetAddress('sqlite3_column_name');
@sqlite_column_decltype := GetAddress('sqlite3_column_decltype');
@sqlite_exec := GetAddress('sqlite3_exec');
@sqlite_last_insert_rowid := GetAddress('sqlite3_last_insert_rowid');
@sqlite_changes := GetAddress('sqlite3_changes');
@sqlite_errmsg := GetAddress('sqlite3_errmsg');
@sqlite_interrupt := GetAddress('sqlite3_interrupt');
@sqlite_complete := GetAddress('sqlite3_complete');
@sqlite_busy_handler := GetAddress('sqlite3_busy_handler');
@sqlite_busy_timeout := GetAddress('sqlite3_busy_timeout');
@sqlite_get_table := GetAddress('sqlite3_get_table');
@sqlite_free_table := GetAddress('sqlite3_free_table');
@sqlite_freemem := GetAddress('sqlite3_free');
@sqlite_libversion := GetAddress('sqlite3_libversion');
@sqlite_set_result_string := GetAddress('sqlite3_result_string');
@sqlite_set_result_int := GetAddress('sqlite3_result_int');
@sqlite_set_result_double := GetAddress('sqlite3_result_double');
@sqlite_set_result_error := GetAddress('sqlite3_result_error');
@sqlite_user_data := GetAddress('sqlite3_user_data');
@sqlite_aggregate_context := GetAddress('sqlite3_aggregate_context');
@sqlite_aggregate_count := GetAddress('sqlite3_aggregate_count');
@sqlite_set_authorizer := GetAddress('sqlite3_set_authorizer');
@sqlite_trace := GetAddress('sqlite3_trace');
@sqlite_compile := GetAddress('sqlite3_prepare');
@sqlite_step := GetAddress('sqlite3_step');
@sqlite_finalize := GetAddress('sqlite3_finalize');
@sqlite_reset := GetAddress('sqlite3_reset');
@sqlite_progress_handler := GetAddress('sqlite3_progress_handler');
@sqlite_commit_hook := GetAddress('sqlite3_commit_hook');
@sqlite_rekey := GetAddress('sqlite3_rekey');
@sqlite_key := GetAddress('sqlite3_key');
end;
initialization
if Assigned(ZPlainSqlite3.LibraryLoader) then
ZPlainSqlite3.LibraryLoader.Free;
ZPlainSqlite3.LibraryLoader :=
TZSQLiteNativeLibraryLoader.Create([SQLite3DllLocation]);
end.
Básicamente, esta unidad "copia" lo que hace la unidad ZPlainSqlite3 que es donde se carga la biblioteca de sqlite.
// Saludos