`
cfeers
  • 浏览: 134098 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

(转)如何在 Delphi 中静态链接 SQLite

阅读更多

如何在 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 '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静态连接sqlite3.5.4

    研究sqlite的delphier可以看看

    sqlite3.6.15 for delphi

    含DELPHI静态OBJ等组件 支持数据库加密使用 支持API连接 支持ODBC连接 支持密码连接 ODBC下支持SQL格式修改密码 附带使用Delphi的Demo示例 修改密码 pragma password = 888888; 重设为空密码 pragma password = ;...

    sqlite 3.6.12 支持动态\静态引用

    SQLite3Lib.pas 动态\静态引用封装单元 sqlite3_mod_*.dll ODBC SQLITE3 扩展 DLL\OBJ库支持数据库加密使用 支持API连接 支持ODBC连接 支持密码连接 ODBC下支持SQL格式修改密码 附带使用Delphi的Demo示例 修改...

    SQLite3.6.13 ODBC API For Win32

    SQLite3.6.13 ODBC API For WSQLite3Lib.pas 动态\静态引用封装单元 sqlite3_mod_*.dll ODBC SQLITE3 扩展 DLL\OBJ库支持数据库加密使用 支持API连接 支持ODBC连接 支持密码连接 ODBC下支持SQL格式修改密码 附带...

    SQLite Data Access Components (LiteDAC) V5.0.2_Full Sources

    SQLite Data Access Components (LiteDAC) V5.0.2_Full Sources【5.0.2 09-Dec-21】,含全部源代码。 【SQLite数据访问组件】SQLite数据访问...第二种是使用应用程序中客户端库的静态链接进行直接访问的独特可能性。

    SQLite3 6.1.3 ODBC API For Win32

    SQLite3.6.13 ODBC API For WSQLite3Lib.pas 动态\静态引用封装单元 sqlite3_mod_*.dll ODBC SQLITE3 扩展 DLL\OBJ库支持数据库加密使用 支持API连接 支持ODBC连接 支持密码连接 ODBC下支持SQL格式修改密码 ...

    ASQLite 整合 DISQLite 魔改第一版 最大兼容 支持 D2009-DXE8 和 64 位编译平台

    删除属性 DriverDll,已经启用 SQLite 静态库方式编译并链接,不需携带 dll 使用 DISQlite 的静态库编译,版本 3.8.3,兼容性和稳定性均良好 2017-08-23 插入和更新操作只针对已修改的字段进行处理和提交,提高执行...

    ASQLite 整合 DISQLite 魔改第一版 最大兼容 支持 D2009-DXE8 和 64 位平台 1

    删除属性 DriverDll,已经启用 SQLite 静态库方式编译并链接,不需携带 dll 使用 DISQlite 的静态库编译,版本 3.8.3,兼容性和稳定性均良好 2017-08-23 插入和更新操作只针对已修改的字段进行处理和提交,提高执行...

    DELPHI做后台的网站源代码

    1、完整DELPHI代码,使用最基本的CGI 2、稍加改动,可以用于ISAPI等 3、后端纯接口,类似RETFUL 4、内置SQLite数据库,稍做修改可以换用其他数据库 5、编译结果是EXE,复制到服务器的CGI目录下后,建议去掉exe扩展名...

    易语言程序免安装版下载

    “在库中的对应命令名”请务必准确填写静态库中公开导出的符号名称(C函数(cdecl)编译后,符号名称通常是在函数名称前加下划线(_));“在库中的对应命令名”以@开头表示以cdecl方式调用,否则表示以默认的stdcall...

    vc++ 应用源码包_1

    利用Delphi的代码在VC中显示JPG图片,不使用动态连接库。 Mail_Report.zip 一个邮件报告程序。 SrcFirstProg.zip 解释了最基本的MFC程序流程。 tabcontrol_demo.zip tabcontrol_src.zip 自定义的标签控件对话框...

    vc++ 应用源码包_2

    利用Delphi的代码在VC中显示JPG图片,不使用动态连接库。 Mail_Report.zip 一个邮件报告程序。 SrcFirstProg.zip 解释了最基本的MFC程序流程。 tabcontrol_demo.zip tabcontrol_src.zip 自定义的标签控件对话框...

    vc++ 应用源码包_6

    利用Delphi的代码在VC中显示JPG图片,不使用动态连接库。 Mail_Report.zip 一个邮件报告程序。 SrcFirstProg.zip 解释了最基本的MFC程序流程。 tabcontrol_demo.zip tabcontrol_src.zip 自定义的标签控件对话框...

    vc++ 应用源码包_5

    利用Delphi的代码在VC中显示JPG图片,不使用动态连接库。 Mail_Report.zip 一个邮件报告程序。 SrcFirstProg.zip 解释了最基本的MFC程序流程。 tabcontrol_demo.zip tabcontrol_src.zip 自定义的标签控件对话框...

    vc++ 应用源码包_3

    利用Delphi的代码在VC中显示JPG图片,不使用动态连接库。 Mail_Report.zip 一个邮件报告程序。 SrcFirstProg.zip 解释了最基本的MFC程序流程。 tabcontrol_demo.zip tabcontrol_src.zip 自定义的标签控件对话框...

    vc++ 开发实例源码包

    代码里用了备份dll的方法,因此在自定义的函数中可以直接调用在内存中备份的dll代码,而不需要再把函数头部改来改去。 IOCP反弹远控客户端模型,外加上线服务端,全部代码注释! 如题。这个是IOCP远程控制软件的...

Global site tag (gtag.js) - Google Analytics