搞了我幾個小時,終於成功在 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
聲明的函數參數不匹配加密