SQLite 库可以嵌入(链接)到 Delphi 可执行文件吗?

Posted

技术标签:

【中文标题】SQLite 库可以嵌入(链接)到 Delphi 可执行文件吗?【英文标题】:Can SQLite library embed (Link) to Delphi executable file? 【发布时间】:2011-05-20 10:30:32 【问题描述】:

我想知道我们是否能够将 SQlite 库嵌入到 Delphi 可执行文件中,并且我们可以将我们的应用程序部署为没有任何 SQlite dll 文件的单个 .exe 文件。

嵌入不是将sqlite dll文件保存到资源中,而是链接到Delphi可执行文件。

【问题讨论】:

Aducom wrapper 似乎是您要查找的内容。 【参考方案1】:

我还没有尝试过这个组件,但我计划在未来 Delphi Inspiration - DISQLite3

还有 Synopse OpenSource SQLite3 Framework

也提供免费软件版本

【讨论】:

我们的SQLite3 dedicated classes 现在可以在我们的 ORM 框架范围之外轻松使用。如果需要(通过 OleDB 或直接 Oracle 访问),它们也可以被另一个数据库引擎替换。【参考方案2】:

我们已经使用 Borland 的免费命令行工具 C 编译器编译了 SQLite3,并在 Delphi 中使用 $LINK 'OBJS\sqlite3.obj' 链接了生成的 OBJ 文件,并为我们需要的函数编写了 pascal 包装器。

链接时解决一些标准 C 库函数时出现问题,但我们在 Delphi 中重新实现了它们。

【讨论】:

这正是我们对Open Source binding of SQLite3 所做的。所以你有所有the source code at hand - 尤其是纯 Delphi 代码中的标准 C 库等价物(这不是那么明显)。【参考方案3】:

我遇到了同样的问题,这是我想出的解决方案。也许它可以帮助你。只需包含 sqlite3,然后您就可以直接访问 dll 函数。我使用了已经概述的相同方法: http://simvector.com/download/delphi_sqlite3.zip

DLL 只是以源代码形式编码,DLLLoader 单元在运行时加载它。最终结果是您的发行版中没有额外的 DLL,其代价是所有内容一次加载到内存中,而不是通过操作系统按需加载的部分。

我们需要它正常工作,但发行版中没有额外的 dll。所以可以满足我们的需求。

【讨论】:

这似乎是一个有趣的解决方案。我认为这是对 DISqlite 的青睐解决方案 是的,我在我的代码库中使用这种方法已经有一段时间了,效果很好。 我认为将 sqlite dll 保存到资源中并加载到 dll 加载器中应该是要走的路。我从不知道我们可以从内存流中加载 dll。感谢您向我展示示例。 我刚刚找到了这个网站:synopse.info/fossil/wiki?name=SQLite3+Framework 据我所知,我认为它已被翻译成 Delphi。如果是这样,那么我们不再需要通过这些额外的箍。 原来的zip文件已经不在线了。有一个关于如何将 DLL 从资源加载到 TMemoryStream 中然后直接使用它而不将其写入磁盘的指南:delphi.about.com/od/windowsshellapi/a/…【参考方案4】:

Anydac SQLite 驱动程序具有静态链接的 SQLite 引擎。不过,它是商业图书馆。他们有一个关于 anydac 和 sqlite 的article。

【讨论】:

【参考方案5】:

Delphi 可以链接 .obj 文件,因此如果您有它们可用(或编译它们的源代码),您可以将它们链接到可执行文件中。但是你不能用 SQLLite dll 来做到这一点。

IIRC DISQLite 3 正是这样做的,检查一下。

【讨论】:

说起来很容易,但做起来往往很难。您通常还需要提供 C 运行时函数,并且对于可能是一项糟糕的工作的大型库。另外,在链接 .obj 文件时,您必须处理奇怪的排序问题:***.com/questions/4638186/…【参考方案6】:

您可以下载 SQLite 开源并将其编译到任何可以编译 vanilla C 代码的环境中。这不是特别难。

【讨论】:

以上是关于SQLite 库可以嵌入(链接)到 Delphi 可执行文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

把exe嵌入到自己的exe中。delphi xe3

与 SQlite 一起使用的 Delphi 组件

SQLite - 如何从 XML 文件插入 JPG 图像(使用 Delphi 2009)

delphi可以嵌入exe吗

delphi中如何嵌入网页?

可以将 WinForms 嵌入到 VCL Delphi 应用程序中吗?