如何在 Delphi 中靜態連接 SQLite

搞了我幾個小時,終於成功在 Delphi 中靜態連接了sql

 SQLite (v3.5.4),下一步就是研究加密了,呵呵
中間其實遇到不少問題,今天累了,就不說了,改天補上
函數

 

 

 



下載測試工程

下面說說方法

1.固然是下載 SQLite 的源代碼啦,呵呵,不過記得要是 all in one 的 amalgamation 版本哦
  (修正: amalgamation 並不是 all in one, 只是 core code all in one, 源代碼裏的其餘文件也是不能少的!)
2.解壓縮,獲得3個文件 sqlite3.c sqlite3.h sqlite3ext.h
  而後把 sqlite3.c 編譯成 obj 以便在 Delphi 中使用
  要注意的是不要用 VC 編譯,要用 Borland 的 C++ 編譯器,好比 Delphi 自帶的 bcc
  這主要是由於 VC 編譯的 obj 是 COFF 格式的,而 Borland 用的 obj 是 OMF 格式
  bcc 編譯的命令行: bcc32 -pc -RT- -O -w- -6 -I(bcc32)\include -c sqlite3.c
3.光有 sqlite3.obj 還不夠哦,呵呵,由於 sqlite3.c 有連接其餘的庫
  這裏提供全部要用到的 obj 文件 下載
4.如今全部的 obj 文件都準備好了,不過別高興的太早了,如今只完成了一小部分而已...
  要在 Delphi 中使用這些 obj 中的函數,必需要先聲明一下
  先新建個 Unit, 好比 sqlite3.pas, 而後指定連接的 obj 文件,如
    {$L 'OBJ\sqlite3_5_4.obj'}
    {$L 'OBJ\streams.obj'} //duplicato
    {$L 'OBJ\_ftoul.obj'}
    {$L 'OBJ\files.obj'}
  注意順序哦,呵呵
  而後添加函數聲明
  好比要用到 sqlite3_open 方法,在 sqlite 的源代碼裏聲明是這樣的
    SQLITE_API int sqlite3_open(
      const char *filename,   /* Database filename (UTF-8) */
      sqlite3 **ppDb          /* OUT: SQLite db handle */
    );
  在 Delphi 中相應的聲明爲:
    function _sqlite3_open(dbname: PChar; var db: Pointer): Integer; cdecl; external;
  注意調用方式爲 cdecl, 函數名要以 _ 開頭,不然會找不到
  只是 sqlite3 函數好多哦,呵呵,因此我才說只完成了部分工做嘛...
5.OK,完成了函數聲明纔算是所有完成
  如今能夠正式使用了~
測試

常見問題:
  1.編譯時報 Unsatisfied forward or external declaration
    出現這個錯誤的緣由是聲明的函數的找不到
    通常來講是由於連接的 obj 文件不全,或者順序不對
    還有就是聲明的函數名稱不對,找不到
  2.編譯時報 Internal Error: L3576
    聲明的函數參數不匹配加密

相關文章
相關標籤/搜索