如何在 WinRT DLL 中使用 SQLite?

发布于 2024-12-09 22:40:43 字数 187 浏览 2 评论 0原文

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

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

I am trying to develop a WinRT DLL which uses SQLite to write database.
But it seems like some win32 APIs in SQLite source code are not supported by metro, such as, LoadLibraryW, GetTempPathA.

Is there any way to compile SQLite source code or use SQLite with WinRT DLL?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

世界和平 2024-12-16 22:40:43

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

Well you could always link sqlite3 statically and define new functions for accessing files etc via sqlite3_vfs.

鹤舞 2024-12-16 22:40:43

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

在此处输入图像描述

In VS2012 there is an extension now called SQLite for Windows Runtime. You can download and install this via Visual Studio (requires a restart of the IDE). Then, go to your WinRT project, Add a Reference, under "Windows" choose "Extensions" and you should see it.

enter image description here

岁吢 2024-12-16 22:40:43

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

There's a winrt branch of SQLite now that only uses supported API. On top of that, we implemented SQLite3-WinRT, a WinRT component that allows using SQLite in any of the WinRT languages.

惜醉颜 2024-12-16 22:40:43
  1. sqlite3.c 重命名为 sqlite3.cpp
  2. LoadLibrary 替换为 LoadPackagesLibrary
  3. 修复大量语法错误。
  1. rename sqlite3.c to sqlite3.cpp
  2. replace LoadLibrary with LoadPackagedLibrary
  3. Fix lots of syntax errors.
°如果伤别离去 2024-12-16 22:40:43

来自 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 应用

From the SQLite site

SQLite version 3.7.13 adds support for WinRT and metro style applications for Microsoft Windows 8. The 3.7.13 release is coming sooner than is usual after the previous release in order to get this new capability into the hands of developers. To use SQLite in a metro style application, compile with the -DSQLITE_OS_WINRT flag. Because of the increased application security and safety requirements of WinRT, all database filenames should be full pathnames. Note that SQLite is not capable of accessing databases outside the installation directory and application data directory. This restriction is another security and safety feature of WinRT. Apart from these restrictions, SQLite should work exactly the same on WinRT as it does on every other system.

Tim Heuer provides a walk-through of building a metro app using SQLite on his blog

岁月苍老的讽刺 2024-12-16 22:40:43

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

  1. Winrt 允许您仅写入特定文件夹 (c:\users\\My Documents\)。你必须把你的数据库放在这里。 (在托管环境中很简单。)

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

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

  4. 不要过多依赖 sqlite 文件操作。实施效果不是特别好。例如,即使您没有写权限,写访问测试也会成功。

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

Let me add some remarks on using sqlite/winrt that may save you some headaches:

  1. Winrt allows you to write only to specific folder (c:\users\<user>\My documents\<app>). You have to put your DB here. (Trivial in managed environment.)

  2. Time from time Sqlite uses temp files. (Complex queries that need transient indices, vacuum etc.) These files also must be created in the app folder, but sqlite won't do this unless you set it with temp_store_directory pragma. If you don't do this, you may get random user bug reports.

  3. Note that above pragma is officially deprecated. Ignore this. Native coders might be tempted to use global variable sqlite3_temp_directory instead (encouraged way), but the current binary release (dll) does not publish this variable. (You can do it yourself, but then change sqlite sources and use _declspec(dllexport) attribute; def file does not work.)

  4. Don't rely too much on sqlite file operations. The implementation is not particularly good. For example testing of write access will succeed even if you don't have write permissions.

Apart from this there seem to be no problems with winrt. More advanced users might supply their own (better) winrt driver. It is not too difficult...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文