Witam
Czy istnieje jakaś biblioteka / komponent do Delphi która możliwość odczytu baz sqlite3 ale nie potrzebuje dorzucania do projektu pliku sqlite3.dll ?
Jeśli nie ma to jest jakiś sposób aby załadować ją do zasobów i odczytywać prosto z nich (próbowałem wypakowywać z res przy starcie ale akurat z tą dllką to nie działa i wyskakuje brak pliku ).
Możesz podłączyć LIB-a do projektu, ale to chyba będzie trudniejsze niż ładowanie z RES-a.
Lepiej napisz jak to robisz z RES-em i jaki masz komunikat błędu (jeśli kontrolujesz błędy).
Można wkompilować dll do zasobów i z nich jej używać. Z modułem dllloader.pas, który kiedyś tutaj wrzuciłem działa. I to konkretnie dllka do SQLite, bo kiedyś robiłem testy. Jednak robiłem to pod Delphi 7. Pod nowszymi IDE, może być problem z działaniem..Musisz pogooglować za odpowiednim kodem albo poczekać do jutra wieczora. Wtedy będę miał możliwość wrzucić pliki tutaj.
Olesiu byłbym wdzięczny za przykład jak wykorzystać ten dllloader.pas na sqlite bo to by mnie satysfakcjonowało :-)
Bo RES robiłem tak jak tutaj na forum w dziale FAQ jest przykład i po prostu nie znajdowało pliku pomimo że go wypakował. Ale szczerze mówiąc nie chce nic wypakowywać bo wole skorzystać z rady Olesia, żeby wszystko było w 1 exeku
Proszę bardzo. Dwa przykłady w archiwach dołaczam do tego posta. Tworzone pod Delphi 7. Oprócz źródeł i niezbędnych plików, są też exeki. Pierwszy załącznik ładuje dllkę z www. Zaś drugi wykorzystuje bass.dll
.
Zapytam dość bezczelnie, ale czy mógłbyś podać przykład dla SQLITE bo ciut mam z tym problem :P ?
No pytanie jest tak bezczelne, że nie powinienem na nie odpowiadać :P Z czym masz konretnie problem? Gdyż nie wiem z jakich modułów dla SQLite korzystasz i dllki. Ale ja z sqlite3.dll
i modułu sqlite3.pas
autorstwa Tima Andersona
. I trzeba niestety, mozolnie w module sqlite3.pas
, przerobić deklaracje wszystkich funkcji mniej więcej tak jak jest to zrobione w przykładzie z myszką i dźwiękami oraz bass.dll
. Konkretnie w module a_bass_lib_resource.pas
. Ttylko, że tam potrzebna mi była tylko część ze wszystkich funkcji z dllki bass.
Także stwórz plik *.rc uwzględniający tę dllkę, skompiluj go do *.res przy użyciu brcc32.exe
. Dodaj dyektywą $R
ten zasób. Następnie załaduj go w kodzie, poprzez stream typu TResourceStream
i funkcję Load
obiektu typu TDllLoader
. Teraz wczytaj żądane eksporty poprzez funkcje FindExport
i tyle. Żadnej filozofii tutaj na prawdę nie ma. Kodu, w którym kombinowałem z sqlite3.dll
z zasobów, z tego co widzę już nie posiadam. Albo ogólnie go nigdy nie miałem. Nie pamiętam dokładnie. Pamiętam tylko, że kiedyś ktoś dostał ode mnie na tym forum ten moduł dllloader.pas
. I napisał, że bez problemów właśnie załadował mu dllkę od SQLite3 z zasobów do używania.
Oki, dzięki za pomoc :-)
A jednak potrzebuje pomocy :D
Mam taka funkcje w sqlite3.pas :
function SQLite3_Open(filename: PAnsiChar; var db: TSQLiteDB): integer; cdecl; external SQLiteDLL name 'sqlite3_open';
czyli wg. tego co jest w tym pliku z bass :
var
BASS_Init : function(device : Integer; freq, flags : DWORD; win : HWND; clsid : PGUID) : BOOL; stdcall;
mam zrobić takie cos :
var
Sqlite_Open : function(filename: PAnsiChar; var db: TSQLiteDB): integer; cdecl; external SQLiteDLL name 'sqlite3_open';
?????
I potem wywolac :
DLLData := TResourceStream.Create(HInstance, ResourceWithBassLibraryName, RT_RCDATA);
DLL.Load(DLLData);
DLLData.Destroy;
Sqlite_open := DLL.FindExport('Sqlite_Open');
a zmienna SQLiteDLL zastapić czym ?
Oki, dzieki za pomoc, opanowałem to :P