現在、Visual Studio 2012 の Extensions and Updates manager から SQLite3 v3.7.14 ダウンロードを使用しています。Win32 用にコンパイルすると動作しますが、ARM でコンパイルして実行すると動作しません。sqlite3_temp_directory を設定しようとするとクラッシュします。ここのドキュメント ( http://www.sqlite.org/c3ref/temp_directory.html )に従っているような気がします。
void init()
{
// Set the temporary directory for sqlite prior to opening the database
LPCWSTR zPath = Windows::Storage::ApplicationData::Current->TemporaryFolder->Path->Data();
char zPathBuf[MAX_PATH + 1];
memset(zPathBuf, 0, sizeof(zPathBuf));
WideCharToMultiByte(CP_UTF8, 0, zPath, -1, zPathBuf, sizeof(zPathBuf), NULL, NULL);
sqlite3_temp_directory = sqlite3_mprintf("%s", zPathBuf); // CRASHES HERE ON WINRT
auto localDataPath = Windows::Storage::ApplicationData::Current->LocalFolder->Path;
std::wstring path(localDataPath->Data());
path += L"\\database.sql";
sqlite3_open16(path.c_str(), &m_DB);
}
私は何かを逃したのだろうか?これをデバッグする方法がわかりませんし、WinRT で SQLite3 を使用したり、sqlite3_temp_directory を正しく使用したりする良い例を見つけることもできません。
アップデート:
公式のプリコンパイル済み .lib/.dll ファイルをバイパスして生の sqlite3.h/.c ファイルを含めると、上記のコードが期待どおりに機能することがわかります。