【问题标题】:SQLite in Windows Phone Runtime ComponentWindows Phone 运行时组件中的 SQLite
【发布时间】:2014-03-27 16:24:35
【问题描述】:

我想在我的 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 项目执行此操作时,它编译得很好。但是当我尝试为我的运行时组件编译它时,我得到了很多属于这样的行的错误:

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

    错误是:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    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 匹配。

    【讨论】:

    • 我已经尝试过了,我得到另一个错误(这次是链接器问题)“sqlite3.lo : error LNK2019: unresolved external symbol sqlite3_key_v2 referenced in function sqlite3Pragma”
    • 嗨,我刚刚用 Visual Studio 试过了。以前的错误消失了。但我有一个新的。错误 2 错误 LNK2019:未解析的外部符号 __imp__CrtDbgReportW 在函数“public: void __cdecl std::_String_const_iterator >::_Compat(class std::_String_const_iterator >> const &)const " (?_Compat@?$_String_const_iterator@V?$_String_val@U?$_Simple_types@D@std@@@std@@@std@@ QBAXABV12@@Z) 有什么想法吗?
    • 为这么多的 cmets 感到抱歉。我上面的错误似乎是与发布配置相关的调试问题,它只是用 Visual Studio 编译得很好。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2012-09-23
    • 2015-04-09
    相关资源
    最近更新 更多