?? interop.c
字號(hào):
#include "src/sqliteint.h"
#include "src\os.h"
#include <tchar.h>
#if NDEBUG
#if _WIN32_WCE
#include "merge.h"
// IMPORTANT: This placeholder is here for a reason!!!
// On the Compact Framework the .data section of the DLL must have its RawDataSize larger than the VirtualSize!
// If its not, strong name validation will fail and other bad things will happen.
DWORD _ph[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
#else
#include "merge_full.h"
#endif // _WIN32_WCE
#endif // NDEBUG
#ifdef OS_WIN
#include <tchar.h>
typedef void (WINAPI *SQLITEUSERFUNC)(void *, int, void **);
typedef int (WINAPI *SQLITECOLLATION)(int, const void *, int, const void*);
typedef void (WINAPI *SQLITEUPDATEHOOK)(int, const char *, int, const char *, int, sqlite_int64);
typedef int (WINAPI *SQLITECOMMITHOOK)();
typedef void (WINAPI *SQLITEROLLBACKHOOK)();
typedef HANDLE (WINAPI *CREATEFILEW)(
LPCWSTR,
DWORD,
DWORD,
LPSECURITY_ATTRIBUTES,
DWORD,
DWORD,
HANDLE);
// Callback wrappers
int sqlite3_interop_collationfunc(void *pv, int len1, const void *pv1, int len2, const void *pv2)
{
SQLITECOLLATION *p = (SQLITECOLLATION *)pv;
return p[0](len1, pv1, len2, pv2);
}
void sqlite3_interop_func(sqlite3_context *pctx, int n, sqlite3_value **pv)
{
SQLITEUSERFUNC *pf = (SQLITEUSERFUNC *)sqlite3_user_data(pctx);
pf[0](pctx, n, (void **)pv);
}
void sqlite3_interop_step(sqlite3_context *pctx, int n, sqlite3_value **pv)
{
SQLITEUSERFUNC *pf = (SQLITEUSERFUNC *)sqlite3_user_data(pctx);
pf[1](pctx, n, (void **)pv);
}
void sqlite3_interop_final(sqlite3_context *pctx)
{
SQLITEUSERFUNC *pf = (SQLITEUSERFUNC *)sqlite3_user_data(pctx);
pf[2](pctx, 0, 0);
}
__declspec(dllexport) void WINAPI sqlite3_sleep_interop(int milliseconds)
{
Sleep(milliseconds);
}
int SetCompression(const wchar_t *pwszFilename, unsigned short ufLevel)
{
#ifdef FSCTL_SET_COMPRESSION
HMODULE hMod = GetModuleHandle(_T("KERNEL32"));
CREATEFILEW pfunc;
HANDLE hFile;
unsigned long dw = 0;
int n;
if (hMod == NULL)
{
SetLastError(ERROR_NOT_SUPPORTED);
return 0;
}
pfunc = (CREATEFILEW)GetProcAddress(hMod, _T("CreateFileW"));
if (pfunc == NULL)
{
SetLastError(ERROR_NOT_SUPPORTED);
return 0;
}
hFile = pfunc(pwszFilename, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == NULL)
return 0;
n = DeviceIoControl(hFile, FSCTL_SET_COMPRESSION, &ufLevel, sizeof(ufLevel), NULL, 0, &dw, NULL);
CloseHandle(hFile);
return n;
#else
SetLastError(ERROR_NOT_SUPPORTED);
return 0;
#endif
}
__declspec(dllexport) int WINAPI sqlite3_compressfile(const wchar_t *pwszFilename)
{
return SetCompression(pwszFilename, COMPRESSION_FORMAT_DEFAULT);
}
__declspec(dllexport) int WINAPI sqlite3_decompressfile(const wchar_t *pwszFilename)
{
return SetCompression(pwszFilename, COMPRESSION_FORMAT_NONE);
}
__declspec(dllexport) void WINAPI sqlite3_function_free_callbackcookie(void *pCookie)
{
if (pCookie)
free(pCookie);
}
// sqlite3 wrappers
__declspec(dllexport) const char * WINAPI sqlite3_libversion_interop(int *plen)
{
const char *val = sqlite3_libversion();
*plen = (val != 0) ? strlen(val) : 0;
return val;
}
__declspec(dllexport) int WINAPI sqlite3_libversion_number_interop(void)
{
return sqlite3_libversion_number();
}
__declspec(dllexport) int WINAPI sqlite3_close_interop(sqlite3 *db)
{
return sqlite3_close(db);
}
__declspec(dllexport) int WINAPI sqlite3_exec_interop(sqlite3 *db, const char *sql, sqlite3_callback cb, void *pv, char **errmsg, int *plen)
{
int n = sqlite3_exec(db, sql, cb, pv, errmsg);
*plen = (*errmsg != 0) ? strlen(*errmsg) : 0;
return n;
}
__declspec(dllexport) sqlite_int64 WINAPI sqlite3_last_insert_rowid_interop(sqlite3 *db)
{
return sqlite3_last_insert_rowid(db);
}
__declspec(dllexport) int WINAPI sqlite3_changes_interop(sqlite3 *db)
{
return sqlite3_changes(db);
}
__declspec(dllexport) int WINAPI sqlite3_total_changes_interop(sqlite3 *db)
{
return sqlite3_total_changes(db);
}
__declspec(dllexport) void WINAPI sqlite3_interrupt_interop(sqlite3 *db)
{
sqlite3_interrupt(db);
}
__declspec(dllexport) int WINAPI sqlite3_complete_interop(const char *sql)
{
return sqlite3_complete(sql);
}
__declspec(dllexport) int WINAPI sqlite3_complete16_interop(const void *sql)
{
return sqlite3_complete16(sql);
}
__declspec(dllexport) int WINAPI sqlite3_busy_handler_interop(sqlite3 *db, int(*cb)(void *, int), void *pv)
{
return sqlite3_busy_handler(db, cb, pv);
}
__declspec(dllexport) int WINAPI sqlite3_busy_timeout_interop(sqlite3 *db, int ms)
{
return sqlite3_busy_timeout(db, ms);
}
__declspec(dllexport) int WINAPI sqlite3_get_table_interop(sqlite3 *db, const char *sql, char ***resultp, int *nrow, int *ncolumn, char **errmsg, int *plen)
{
int n = sqlite3_get_table(db, sql, resultp, nrow, ncolumn, errmsg);
*plen = (*errmsg != 0) ? strlen((char *)*errmsg) : 0;
return n;
}
__declspec(dllexport) void WINAPI sqlite3_free_table_interop(char **result)
{
sqlite3_free_table(result);
}
__declspec(dllexport) void WINAPI sqlite3_free_interop(char *z)
{
sqlite3_free(z);
}
__declspec(dllexport) int WINAPI sqlite3_open_interop(const char*filename, sqlite3 **ppdb)
{
return sqlite3_open(filename, ppdb);
}
__declspec(dllexport) int WINAPI sqlite3_open16_interop(const void *filename, sqlite3 **ppdb)
{
return sqlite3_open16(filename, ppdb);
}
__declspec(dllexport) int WINAPI sqlite3_errcode_interop(sqlite3 *db)
{
return sqlite3_errcode(db);
}
__declspec(dllexport) const char * WINAPI sqlite3_errmsg_interop(sqlite3 *db, int *plen)
{
const char *pval = sqlite3_errmsg(db);
*plen = (pval != 0) ? strlen(pval) : 0;
return pval;
}
__declspec(dllexport) const void * WINAPI sqlite3_errmsg16_interop(sqlite3 *db, int *plen)
{
const void *pval = sqlite3_errmsg16(db);
*plen = (pval != 0) ? wcslen((wchar_t *)pval) * sizeof(wchar_t): 0;
return pval;
}
__declspec(dllexport) int WINAPI sqlite3_prepare_interop(sqlite3 *db, const char *sql, int nbytes, sqlite3_stmt **ppstmt, const char **pztail, int *plen)
{
int n = sqlite3_prepare(db, sql, nbytes, ppstmt, pztail);
*plen = (*pztail != 0) ? strlen(*pztail) : 0;
return n;
}
__declspec(dllexport) int WINAPI sqlite3_prepare16_interop(sqlite3 *db, const void *sql, int nchars, sqlite3_stmt **ppstmt, const void **pztail, int *plen)
{
int n = sqlite3_prepare16(db, sql, nchars * sizeof(wchar_t), ppstmt, pztail);
*plen = (*pztail != 0) ? wcslen((wchar_t *)*pztail) * sizeof(wchar_t) : 0;
return n;
}
__declspec(dllexport) int WINAPI sqlite3_bind_blob_interop(sqlite3_stmt *stmt, int iCol, const void *pv, int n, void(*cb)(void*))
{
return sqlite3_bind_blob(stmt, iCol, pv, n, cb);
}
__declspec(dllexport) int WINAPI sqlite3_bind_double_interop(sqlite3_stmt *stmt, int iCol, double *val)
{
return sqlite3_bind_double(stmt,iCol,*val);
}
__declspec(dllexport) int WINAPI sqlite3_bind_int_interop(sqlite3_stmt *stmt, int iCol, int val)
{
return sqlite3_bind_int(stmt, iCol, val);
}
__declspec(dllexport) int WINAPI sqlite3_bind_int64_interop(sqlite3_stmt *stmt, int iCol, sqlite_int64 *val)
{
return sqlite3_bind_int64(stmt,iCol,*val);
}
__declspec(dllexport) int WINAPI sqlite3_bind_null_interop(sqlite3_stmt *stmt, int iCol)
{
return sqlite3_bind_null(stmt, iCol);
}
__declspec(dllexport) int WINAPI sqlite3_bind_text_interop(sqlite3_stmt *stmt, int iCol, const char *val, int n, void(*cb)(void *))
{
return sqlite3_bind_text(stmt, iCol, val, n, cb);
}
__declspec(dllexport) int WINAPI sqlite3_bind_text16_interop(sqlite3_stmt *stmt, int iCol, const void *val, int n, void(*cb)(void *))
{
return sqlite3_bind_text16(stmt, iCol, val, n, cb);
}
__declspec(dllexport) int WINAPI sqlite3_bind_parameter_count_interop(sqlite3_stmt *stmt)
{
return sqlite3_bind_parameter_count(stmt);
}
__declspec(dllexport) const char * WINAPI sqlite3_bind_parameter_name_interop(sqlite3_stmt *stmt, int iCol, int *plen)
{
const char *pval = sqlite3_bind_parameter_name(stmt, iCol);
*plen = (pval != 0) ? strlen(pval) : 0;
return pval;
}
__declspec(dllexport) int WINAPI sqlite3_bind_parameter_index_interop(sqlite3_stmt *stmt, const char *zName)
{
return sqlite3_bind_parameter_index(stmt, zName);
}
__declspec(dllexport) int WINAPI sqlite3_column_count_interop(sqlite3_stmt *stmt)
{
return sqlite3_column_count(stmt);
}
__declspec(dllexport) const char * WINAPI sqlite3_column_name_interop(sqlite3_stmt *stmt, int iCol, int *plen)
{
const char *pval = sqlite3_column_name(stmt, iCol);
*plen = (pval != 0) ? strlen(pval) : 0;
return pval;
}
__declspec(dllexport) const void * WINAPI sqlite3_column_name16_interop(sqlite3_stmt *stmt, int iCol, int *plen)
{
const void *pval = sqlite3_column_name16(stmt, iCol);
*plen = (pval != 0) ? wcslen((wchar_t *)pval) * sizeof(wchar_t) : 0;
return pval;
}
__declspec(dllexport) const char * WINAPI sqlite3_column_decltype_interop(sqlite3_stmt *stmt, int iCol, int *plen)
{
const char *pval = sqlite3_column_decltype(stmt, iCol);
*plen = (pval != 0) ? strlen(pval) : 0;
return pval;
}
__declspec(dllexport) const void * WINAPI sqlite3_column_decltype16_interop(sqlite3_stmt *stmt, int iCol, int *plen)
{
const void *pval = sqlite3_column_decltype16(stmt, iCol);
*plen = (pval != 0) ? wcslen((wchar_t *)pval) * sizeof(wchar_t) : 0;
return pval;
}
__declspec(dllexport) int WINAPI sqlite3_step_interop(sqlite3_stmt *stmt)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -