我想在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
}
我尝试过:
我的第一个想法是尝试解决这个问题,就像我为iOS和Android所做的那样。我试图包含sqlite头文件和.c文件。我还尝试了所有选项和编译器标志,监听here。当我使用Win32项目执行此操作时,它编译得很好。但是当我尝试为我的Runtime组件编译它时,我得到了很多属于这样的行的错误:
{ "AreFileApisANSI", (SYSCALL)AreFileApisANSI, 0 },
错误是:
Error 2 error C2065: 'AreFileApisANSI': undeclared identifier
下一个想法是只导入标题并链接二进制文件。由于存在许多不同的错误和问题,这一直在失败。通常回到问题,我无法编译或找到工作和arm编译的lib。
编辑:3。 我试过的其他东西,忘了提。我尝试在NuGet管理器中使用SQLite包。但是我不能使用sqlite-net-wp8包。我得到一个错误,解释我已经定义了“Native:0.0v”或类似的东西。遗憾的是,这个错误对我没有帮助。
我在这里想办法解决这个问题。这可能是如何让我的一种工作方法的解决方案。或者它可能是一种完全不同的解决方法。
我正在使用Visual Studio 2013.我在Windows上运行Parallels中的Windows。
答案 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匹配。