5

我正在尝试开发一个使用 SQLite 编写数据库的 WinRT DLL。但似乎 Metro 不支持 SQLite 源代码中的某些 win32 API,例如LoadLibraryW,、、GetTempPathA

有没有办法编译 SQLite 源代码或将 SQLite 与 WinRT DLL 一起使用?

4

6 回答 6

2

在 VS2012 中,现在有一个名为 SQLite for Windows Runtime 的扩展。您可以通过 Visual Studio 下载并安装它(需要重新启动 IDE)。然后,转到您的 WinRT 项目,添加引用,在“Windows”下选择“扩展”,您应该会看到它。

在此处输入图像描述

于 2012-08-31T18:00:19.030 回答
2

好吧,您总是可以静态链接 sqlite3 并定义用于通过sqlite3_vfs访问文件等的新函数。

于 2011-10-14T09:23:47.777 回答
1

现在有一个SQLite 的winrt 分支,它只使用受支持的 API。最重要的是,我们实现了SQLite3-WinRT,这是一个允许在任何 WinRT 语言中使用 SQLite 的 WinRT 组件。

于 2012-05-02T13:13:41.503 回答
0

让我添加一些关于使用 sqlite/winrt 的评论,这可能会为您省去一些麻烦:

  1. Winrt 允许您仅写入特定文件夹 (c:\users\<user>\My documents\<app>)。你必须把你的数据库放在这里。(在托管环境中微不足道。)

  2. 有时 Sqlite 使用临时文件。(需要临时索引、真空等的复杂查询)这些文件也必须在 app 文件夹中创建,但 sqlite 不会这样做,除非您使用 temp_store_directory pragma 设置它。如果您不这样做,您可能会收到随机的用户错误报告。

  3. 请注意,上述 pragma 已正式弃用。忽略这个。本机编码人员可能会尝试使用全局变量 sqlite3_temp_directory 来代替(鼓励方式),但当前的二进制版本 (dll) 并未发布此变量。(您可以自己做,但随后更改 sqlite 源并使用 _declspec(dllexport) 属性;def 文件不起作用。)

  4. 不要过分依赖 sqlite 文件操作。实现不是特别好。例如,即使您没有写入权限,写入权限的测试也会成功。

除此之外,winrt似乎没有问题。更高级的用户可能会提供他们自己的(更好的)winrt 驱动程序。这不是太难...

于 2012-09-03T11:00:40.750 回答
0
  1. 重命名sqlite3.csqlite3.cpp
  2. 替换LoadLibraryLoadPackagedLibrary
  3. 修复大量语法错误。
于 2011-11-17T06:49:11.690 回答
0

从 SQLite 网站

SQLite 版本 3.7.13 增加了对 Microsoft Windows 8 的 WinRT 和 Metro 风格应用程序的支持。3.7.13 版本比上一版本之后的通常版本更早发布,以便将这一新功能交到开发人员手中。要在 Metro 风格应用程序中使用 SQLite,请使用 -DSQLITE_OS_WINRT 标志进行编译。由于 WinRT 增加了应用程序的安全性和安全性要求,所有数据库文件名都应该是完整路径名。请注意,SQLite 无法访问安装目录和应用程序数据目录之外的数据库。此限制是 WinRT 的另一个安全功能。除了这些限制之外,SQLite 在 WinRT 上的工作方式应该与在其他所有系统上的工作方式完全相同。

Tim Heuer在他的博客上提供了使用 SQLite构建 Metro 应用程序的演练

于 2012-06-25T00:41:36.937 回答