如何在 Delphi 中靜態連結 SQLite

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   使用   sp   for   on   

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

 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
    聲明的函數參數不匹配

 

如何在 Delphi 中靜態連結 SQLite

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.