【问题标题】:Another DLL File which includes headers for sqlite?另一个包含 sqlite 标头的 DLL 文件?
【发布时间】:2014-11-25 11:19:37
【问题描述】:

我正在寻找 sqlite3.dll 的替代方案 - 典型系统上是否有任何文件或任何其他包含 sqlite 调用的文件?我正在寻找一个 DLL 文件。我知道 mozilla 浏览器捆绑包曾经附带一个名为 mozsqlite3.dll 的文件,其中包含调用,但现在它似乎因为某些未知和未记录的原因从他们的捆绑包中消失了?包含类似文件的 Mozilla 捆绑包中是否有类似的东西?

这样当我做类似的事情时

HMODULE lib0 = LoadLibraryA("sqlite3.dll"); // file

我可以访问 dll 的内容,而不必将其与我的游戏捆绑在一起?

我想发布没有依赖项的游戏,仅包含 .exe 文件。有什么办法可以利用另一个类似于 sqlite3.dll 的文件,其中可能包含 sqlite3 API 调用的标头?例如,mozilla 包中的 mozsqlite3.dll 曾经是一种替代方案。

【问题讨论】:

    标签: c++ winapi dll sqlite


    【解决方案1】:

    我不建议依赖其他软件。用户可能没有安装 Firefox,或者您可能会在更高版本的 Firefox 打包修改后的 SQLite 实现时遇到版本问题。

    如果您不愿意在您的程序中添加额外的.dll 文件,我建议您将 SQLite 本身静态链接到您的可执行文件中。这样您就可以完全控制您的 SQLite,并且用户将使用您彻底测试过的相同版本。

    要静态链接 SQLite,您必须下载 SQLite 合并源并使用 Visual Studio 将自己编译为静态库,并将生成的 .lib 文件添加为项目的依赖项。 Tutorial with images here

    【讨论】:

    • 如果我静态链接sqlite dll文件,那是什么意思?我怎么能用 msvc++ 做到这一点?现在我只是在链接图书馆。但是我需要合并一个 dll,如果我下载 dll 并将其放在我的项目文件夹中,那么 LoadLibraryA 就像我不需要将它与我的游戏一起发布?这就是静态链接的意思?
    • @user3251225 否。使用静态链接,所有 SQLite 代码都将驻留在 .exe 文件中。没有.dlls。
    • 但是我需要加载库的原因是因为如果我不加载库,我将无法获取它的 procaddress,并且我的 exe 文件被防病毒产品标记为恶意程序。所以我认为另一种方法是加载库( sqlite3.dll )然后 getprocaddress 并将其分配给另一个变量并从那里使用它。但是现在,如果我使用我的 exe 从另一个用户的系统中读取本地文件,防病毒软件会将我的程序标记为病毒!
    • 您根本不将 getprocaddress 与静态库一起使用。您只需像应用程序中的任何其他类一样使用它。
    • @user3251225 忘记.dlls。静态链接后,您可以像使用自己的函数一样使用 SQLite 函数。我已经用教程更新了我的答案。
    猜你喜欢
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    相关资源
    最近更新 更多