我想在我的 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
}
我尝试过的:
我的第一个想法是尝试解决这个问题,就像我在 iOS 和 Android 上所做的那样。我尝试包含 sqlite header 和 .c 文件。我还尝试了所有选项和编译器标志听 here 。当我对 Win32 项目执行此操作时,它编译得很好。但是当我尝试为我的运行时组件编译它时,我收到很多属于这样的行的错误:
{ "AreFileApisANSI", (SYSCALL)AreFileApisANSI, 0 },
错误是:
Error 2 error C2065: 'AreFileApisANSI': undeclared identifier
下一个想法是仅导入 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/