Windows Phone运行时组件中的SQLite

时间:2014-03-27 16:24:36

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

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

现在我的本机代码需要SQLite。对于其他平台,我能够使用我的本机代码编译sqlite3并让它运行。但我无法让它与Visual Studio一起工作。我的本地课程看起来像这样:

#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头文件和.c文件。我还尝试了所有选项和编译器标志,监听here。当我使用Win32项目执行此操作时,它编译得很好。但是当我尝试为我的Runtime组件编译它时,我得到了很多属于这样的行的错误:

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

    错误是:

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

  3. 编辑:3。 我试过的其他东西,忘了提。我尝试在NuGet管理器中使用SQLite包。但是我不能使用sqlite-net-wp8包。我得到一个错误,解释我已经定义了“Native:0.0v”或类似的东西。遗憾的是,这个错误对我没有帮助。

    我在这里想办法解决这个问题。这可能是如何让我的一种工作方法的解决方案。或者它可能是一种完全不同的解决方法。

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

1 个答案:

答案 0 :(得分:2)

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

这似乎与SQLite邮件列表上的what others have found匹配。