• 如何在 Delphi 中静态链接 SQLite


    搞了我几个小时,终于成功在 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 'OBJsqlite3_5_4.obj'}
        {$L 'OBJstreams.obj'} //duplicato
        {$L 'OBJ\_ftoul.obj'}
        {$L 'OBJfiles.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
        声明的函数参数不匹配

  • 相关阅读:
    xmlHttp.js.rar 没啥说的。。各浏览器都支持的纯ajax!
    实用正则表达式(实用篇) [转]
    Jquery的好书[pdf,新书]
    xml 中的冒号 读取问题的解决
    给一个DataTable 添加一列,来保存计算出来的结果。。
    悟透JavaScript(转) 超级精华
    当前标识符读写权限
    ie浏览器开机自动启动且全屏
    SQL Server ErrorLog 错误日志(如果数据库所占空间变大)
    利用Git hub创建博客
  • 原文地址:https://www.cnblogs.com/ljl_falcon/p/4147093.html
Copyright © 2020-2023  润新知