1

現在、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 ファイルを含めると、上記のコードが期待どおりに機能することがわかります。

4

1 に答える 1

1

SQLite3 チームから、実際に問題があることが通知されました。問題自体は、SQLite3 コードベースまたは Microsoft MSVC コンパイラのいずれかにあり、解決に向けて積極的に取り組んでいます。

この問題は、最適化が有効になっている場合にのみ発生し、主な原因は /Og スイッチであることが判明しました。この問題を解決するには、ビルドの最適化を一時的に無効にすることができます。

于 2012-10-18T01:12:42.707 に答える