如何在WinRT DLL中使用SQLite?

时间:2011-10-14 06:43:12

标签: c++ sqlite windows-runtime microsoft-metro

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

有没有办法编译SQLite源代码或使用带有WinRT DLL的SQLite?

6 个答案:

答案 0 :(得分:2)

您可以随时静态链接sqlite3并定义用于通过sqlite3_vfs访问文件等的新功能。

答案 1 :(得分:2)

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

enter image description here

答案 2 :(得分:1)

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

答案 3 :(得分:0)

  1. sqlite3.c重命名为sqlite3.cpp
  2. LoadLibrary替换为LoadPackagedLibrary
  3. 修复了很多语法错误。

答案 4 :(得分: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提供walk-through of building a metro app

答案 5 :(得分:0)

让我添加一些关于使用sqlite / winrt的评论,这可能会让你感到头疼:

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

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

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

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

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