c++ - Windows Phone 运行时组件中的 SQLite

标签 c++ sqlite windows-phone-8 windows-runtime visual-studio-2013

我想在我的 WindowsPhone 8 应用程序中使用 native C++ 代码。为此,我构建了一个“Windows Phone 运行时组件”来包装我的 C++ 代码。当我编译运行时组件时,我只是使用 Visual Studio 编译 native 代码。这需要一些调整,但 Visual Studio 现在正在编译。

现在我的 native 代码需要 SQLite。对于其他平台,我可以用我的 native 代码编译 sqlite3 并让它运行。但我就是无法让它与 Visual Studio 一起使用。我的 native 类如下所示:

#include "Main.h"
#include <sqlite3.h>
#include <stdlib.h>
#include <iostream>

//visual studio needs additional imports for std
#if defined(_MSC_VER)
#include <time.h>
#include <string>
#endif


void NativeClass::testDataBase() {
    //some SQL stuff here
}

我尝试过的:

  1. 我的第一个想法是尝试解决这个问题,就像我在 iOS 和 Android 上所做的那样。我尝试包含 sqlite header 和 .c 文件。我还尝试了所有选项和编译器标志听 here 。当我对 Win32 项目执行此操作时,它编译得很好。但是当我尝试为我的运行时组件编译它时,我收到很多属于这样的行的错误:

    { "AreFileApisANSI",         (SYSCALL)AreFileApisANSI,         0 },
    

    错误是:

    Error 2 error C2065: 'AreFileApisANSI': undeclared identifier
    
  2. 下一个想法是仅导入 header 并链接二进制文件。由于存在许多不同的错误和问题,这一直失败。通常回到问题,我无法编译或找到一个工作的且适用于arm编译的库。

编辑:3。 我尝试过但忘记提及的其他事情。我尝试在 NuGet 管理器中使用 SQLite 包。但我无法使用 sqlite-net-wp8 包。我收到一条错误消息,解释说我已经定义了“Native:0.0v”或类似的内容。不幸的是,这个错误对我没有帮助。

我在这里寻求解决这个问题的方法。这可能是如何让我的方法之一发挥作用的解决方案。或者它可能是解决这个问题的完全不同的方法。

我正在使用 Visual Studio 2013。并且我在 Mac 上的 Parallels 中运行 Windows。

最佳答案

Windows Phone 8 的 C 编译标志与一般 Windows 不同。

特别是 SQLITE 需要编译为不使用 WP8 上不可用的 API。 我发现以下工作(SQLITE v3.7.17):

/DSQLITE_OS_WINRT=1/DSQLITE_OMIT_LOAD_EXTENSION=1/DSQLITE_WIN32_FILEMAPPING_API=1

这似乎匹配 what others have found在 SQLite 邮件列表中。

关于c++ - Windows Phone 运行时组件中的 SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22693526/

相关文章:

java - 一个很好的 Android 上的 Java ORM 库

c# - 在 LINQ 中调用 Task<> 方法并返回数据

asp.net - 如何将 ASP.NET Web API 受众限制为单个应用程序,无需登录?

windows - 带有 Itemtemplate 或 IValueConverter 的 LongListSelector 的严重错误

java - 使用 SOAP 将 C++ 应用程序连接到 JAVA 网络应用程序

java - 设计方法错误代码的最佳做法是什么?

android - SQLITE - 根据位查询整数字段

php - mysql_num_rows 是否有效和/或标准做法?

c++ - 运算符+重载问题

c++ - 是否可以创建一个容器来保存三种数据类型中的一种,并且可以通过单个界面进行查询?