Сбой 64-битной библиотеки SQLite при сбое sqlite3_prepare_v2 - PullRequest
0 голосов
/ 21 августа 2010

Я компилирую 32-битную и 64-битную библиотеку SQLite с Microsoft Visual C ++ из командной строки для простой оболочки C #.32-разрядная версия работает нормально, но 64-разрядная версия полностью вылетает из моего приложения, когда sqlite3_prepare_v2 возвращает что-либо, кроме SQLITE_OK.

build.bat

set ARGS=/nologo /LD /DSQLITE_ENABLE_COLUMN_METADATA sqlite3.c /link /def:sqlite3.def

call vcvars32.bat
cl %ARGS% /out:sqlite3.dll

call vcvars64.bat
cl %ARGS% /out:sqlite3_64.dll

Код C # (соответствующие биты)

public delegate int _sqlite3_prepare_v2(IntPtr db, string zSql, int nByte, out IntPtr ppStmt, out IntPtr pzTail);

public static readonly _sqlite3_prepare_v2 sqlite3_prepare_v2;

IntPtr tail;
if (SQLite.sqlite3_prepare_v2(_db.Handle, text, -1, out _handle, out tail) != SQLite.SQLITE_OK)
    throw new SQLiteException(_db);

Функции связаны во время выполнения, так что я могу скомпилировать для любого процессора и выбрать, какую версию библиотеки использовать.Когда я запускаю это в 64-битной системе, я получаю это:

vshost-clr2.exe has stopped working
Problem signature:
  Problem Event Name:       APPCRASH
  Application Name:         SQLiteTest.vshost.exe
  Application Version:      10.0.30319.1
  Application Timestamp:    4ba2084b
  Fault Module Name:        StackHash_4a05
  Fault Module Version:     6.1.7600.16559
  Fault Module Timestamp:   4ba9b802
  Exception Code:           c0000374
  Exception Offset:         00000000000c6df2
  OS Version:               6.1.7600.2.0.0.256.48
  Locale ID:                1033
  Additional Information 1: 4a05
  Additional Information 2: 4a055724055f1d4270656b7cd547877a
  Additional Information 3: 92b7
  Additional Information 4: 92b737f393457f0de2d4edb6b32c0617

Есть идеи?

РЕДАКТИРОВАТЬ: Сообщение, которое я получаю при отладке приложения,:

Повреждена куча

1 Ответ

0 голосов
/ 21 августа 2010

SQLITE_MISUSE подразумевает, что вы используете библиотеку ненадлежащим образом.Если вы можете изменить свой код, чтобы он не вызывал его в 32-разрядной версии, я подозреваю, что ваш 64-разрядный сбой пройдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...