Я компилирую 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
Есть идеи?
РЕДАКТИРОВАТЬ: Сообщение, которое я получаю при отладке приложения,:
Повреждена куча