sqlite3.dll in den C++Builder 6 einbinden



  • Ich habs gerade mal gemacht. Es compiliert bei mir relativ problemlos durch (viele Warnungen). Die lib ist ca. 1.5MB groß.



  • Wie muss man das jetzt verstehen? Du hast die sqlite-source-3_5_6.zip (nicht sqlite-amalgamation-3_5_6.zip) erfolgreich zur LIB compiliert? Wie gross issn die geworden?

    Unter BCB5? Wenn jetzt keine geheimen Compiler Einstellungen gemacht hast, müsste das ja bedeuten das der BCB5 nen Bug hat. Anders kann ichs mir nicht erklären.



  • Ja mit sqlite-source-3_5_6.zip. Ich habe den BCB6 genommen, da du dich darauf in der Überschrift bezogen hast. Wenn du willst kann ich aber auch nochmal den 5er nehmen.



  • Das wäre sehr nett von dir, da ich "nur" den BCB5 habe und gern darauf zum laufen bekommen wollen würde.



  • Ok, jetzt hab ichs mit dem BCB5 nochmal durckompiliert. Ging auch problemlos. Es kamen nur die schon bekannten Warnungen. Die tclsqlite.c habe ich nicht mit reingenommen. Die lib ist beim BCB5 ca. 2.7MB groß.



  • Ok, dann scheint es an meiner Unfähigkeit zu liegen.. wo ist die nächste Wand gegen die ich laufen kann? Ich versteh erlich nicht was ich falsch machen könnte.

    Neue Bibliothek starten und speichern, c-Dateien hinzufügen (bis auf tclsqlite.c) und compiliere das mit der TLib einstellung Seitengrösse 64 und ohne vorgehakte dynamische RTL.

    Das schon alles. Wieviele Fehler kann man denn da machen? 😞



  • Nicht viele. 🙂
    Ich mache das fast genau so. Ich habe noch die vorkompilierten Header ausgeschaltet.



  • Oho, dann geht er bei mir auch durch. Danke!! Zwar mit über 100 Warnungen, aber er geht durch und erstellt eine sqlite3.lib welche nur 754KB gross ist. Hatte Compiler auf Entgültige Version gesetzt und so Debugger Infos etc nicht mehr drin. Version klappt auch mit Testprojekt. Warum aber muss man die Header deaktiveren?



  • Bei aktivierten vorkompilierten Headern gibt es Probleme wenn dort Initialisierungen drin sind. Desweiteren fehlen ja hier auch die #pragma hdrstop Anweisungen. Es macht hier sowieso kaum Sinn damit zu arbeiten. So oft kompiliert man diese Lib ja nicht. 🙂



  • Benutzt du SQLite auch, oder hast jetzt nur mal für mich compiliert? 😉



  • Das habe ich nur mal für dich kompiliert. Ich benutze als DB normalerweise Firebird.



  • Na da bedank ich mich doch für die Hilfe nochmal 🙂

    Schade, hät da nämlich Frage noch gehabt. Ich stelle sie einfach mal.
    Ich habe mir wxsqlite3 noch geladen, da man dort Dateien herrausnehmen kann und damit dem sqlite die Kryptfähigkeit geben kann.

    Dazu kopiert man in seinen Source-Ordner von sqlite einfach den Ordner Codec aus wxsqlite3-1.8.3\sqlite3\secure\src\ und passt die pager.c von sqlite mit der von wxsqlite3-1.8.3\sqlite3\secure\src\pager an.

    Zusätzlich muss man noch die Compiler Direktive SQLITE_HAS_CODEC hinzufügen und schon hat man eine LIB welche auch Verschlüsselung beherrscht. Compilieren hat mit Braunsteins Hilfe ja nun geklappt, auch die Version mit Verschlüsselung.

    Wenn ich die LIB die ich erstellt habe, jedoch in mein Testprojekt compiliere, erhalte ich nur ein

    [Linker Fehler] Unresolved external '_sqlite3pager_free_codecarg' referenced from \SQLITE\SQLITE3 TEST\SQLITE3.LIB|pager
    [Linker Fehler] Unresolved external '_sqlite3CodecGetKey' referenced from \SQLITE\SQLITE3 TEST\SQLITE3.LIB|attach
    [Linker Fehler] Unresolved external '_sqlite3CodecAttach' referenced from \SQLITE\SQLITE3 TEST\SQLITE3.LIB|attach
    [Linker Fehler] Unresolved external '_sqlite3_key' referenced from \SQLITE\SQLITE3 TEST\SQLITE3.LIB|pragma
    [Linker Fehler] Unresolved external '_sqlite3_activate_see' referenced from \SQLITE\SQLITE3 TEST\SQLITE3.LIB|pragma

    Beschrieben sind die Funtkionen in

    \sqlite3\codec\codecext.cpp

    Also include ich die Ordner \sqlite3\ und \sqlite3\codec\ und binde die Datei codecext.cpp direkt in meine Projektverwaltung ein. Erhalte dann nur noch:

    [C++ Fehler] stdlib.h(434): E2132 C-Einbindungsangabe dürfen für Vorlagen oder überladene Operatoren nicht verwendet werden.
    [C++ Fehler] stdlib.h(434): E2040 Deklaration nicht ordnungsgemäß abgeschlossen
    [C++ Fehler] stdlib.h(505): E2316 '_argc' ist kein Element von 'std'
    [C++ Fehler] stdlib.h(505): E2272 Bezeichner erwartet
    [C++ Fehler] stdlib.h(506): E2316 '_argv' ist kein Element von 'std'
    [C++ Fehler] stdlib.h(506): E2272 Bezeichner erwartet
    [C++ Fehler] stdlib.h(603): E2316 'min' ist kein Element von 'std'
    [C++ Fehler] stdlib.h(603): E2272 Bezeichner erwartet
    [C++ Fehler] stdlib.h(604): E2316 'max' ist kein Element von 'std'
    [C++ Fehler] stdlib.h(604): E2272 Bezeichner erwartet
    [C++ Fehler] codec.h(28): E2190 Unerwartetes }

    CODEC.H(28)

    #ifdef __cplusplus
    extern "C" {
    #endif
    
    #include "../sqliteInt.h"
    
    // ATTENTION: Macro similar to that in pager.c
    // TODO: Check in case of new version of SQLite
    #include "../os.h"
    #define PAGER_MJ_PGNO(x) ((PENDING_BYTE/(x))+1)
    
    #ifdef __cplusplus
    }  // End of the 'extern "C"' block ... DIES IST ZEILE 28!!!
    #endif
    

    Kann CBuilder damit nicht umgehen bzw muss ich was besonderes wieder einstellen?
    SQLite ist ja C und die Erweiterung in C++ geschrieben.



  • Der Autor der Verschlüsselung selbst hat mir eben die Lösung geliefert

    Man setze extra für den CBuilder
    #define __STDC__ 1
    an entsprechender Stelle und schon klappts.

    In VisualC++ 6 war übrigends das Gefummel nicht nötig, da hat alles von A-Z ohne Probleme beim ersten compilieren geklappt. 🙄

    Ich glaube ich bin erstmal durch mit dem Thema SQLite und werde mich jetzt ans rumspielen machen. Veerschlüsselung klappt übrigends prima.. komplette Datei hat scheinbar nur noch Datensalat.



  • Hallo

    mich würde interessieren wie Du das genau gemacht hast mit dem einbinden der Dateien aus dem codec Ordner. Ein kleines Beispiel wäre echt eine olle Hilfe.


Anmelden zum Antworten