Skip to content

Commit ec2a937

Browse files
Changes associated with SQLiteDLLConnect
1 parent c9fffa4 commit ec2a937

File tree

4 files changed

+852
-77
lines changed

4 files changed

+852
-77
lines changed

SQLiteDLLConnect.cpp

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
#include <windows.h>
2+
#include "SQLiteDLLConnect.h"
3+
#include <cassert>
4+
#include <string>
5+
#include <system_error>
6+
7+
8+
namespace SQLite_DLL
9+
{
10+
template<typename TProc>
11+
inline bool GetProcAddressChecked(HINSTANCE hINSTANCE, const std::string& procName, TProc& typeFunc)
12+
{
13+
if (hINSTANCE == NULL)
14+
return false;
15+
PROC ret = GetProcAddress(hINSTANCE, procName.c_str());
16+
if (!ret)
17+
throw std::system_error(GetLastError(), std::system_category(), "GetProcAddress failed");
18+
typeFunc = reinterpret_cast<TProc>(ret);
19+
return true;
20+
}
21+
static HINSTANCE HinstanceSqliteDll = NULL;
22+
23+
typedef int (WINAPI* SQLITE3_CONFIG)(int, ...);
24+
static SQLITE3_CONFIG SQLite3_config;
25+
26+
typedef char* (WINAPI* SQLITE3_MPRINTF)(const char*, ...);
27+
static SQLITE3_MPRINTF SQLite3_mprintf;
28+
29+
typedef char* (WINAPI* SQLITE3_SNPRINTF)(int, char*, const char*, ...);
30+
static SQLITE3_SNPRINTF SQLite3_snprintf;
31+
32+
typedef int (WINAPI* SQLITE3_DB_CONFIG)(sqlite3*, int op, ...);
33+
static SQLITE3_DB_CONFIG SQLite3_db_config;
34+
35+
typedef void (WINAPI* SQLITE3_LOG)(int iErrCode, const char* zFormat, ...);
36+
static SQLITE3_LOG SQLite3_log;
37+
38+
typedef int (WINAPI* SQLITE3_VTAB_CONFIG)(sqlite3*, int op, ...);
39+
static SQLITE3_VTAB_CONFIG SQLite3_vtab_config;
40+
41+
42+
RunTimeConnect::RunTimeConnect(std::string DllFileName)
43+
{
44+
HinstanceSqliteDll = LoadLibraryA(DllFileName.c_str());
45+
assert(GetProcAddressChecked(HinstanceSqliteDll, "sqlite3_config", SQLite3_config));
46+
assert(GetProcAddressChecked(HinstanceSqliteDll, "sqlite3_mprintf", SQLite3_mprintf));
47+
assert(GetProcAddressChecked(HinstanceSqliteDll, "sqlite3_snprintf", SQLite3_snprintf));
48+
assert(GetProcAddressChecked(HinstanceSqliteDll, "sqlite3_db_config", SQLite3_db_config));
49+
assert(GetProcAddressChecked(HinstanceSqliteDll, "sqlite3_log", SQLite3_log));
50+
assert(GetProcAddressChecked(HinstanceSqliteDll, "sqlite3_vtab_config", SQLite3_vtab_config));
51+
}
52+
53+
#pragma warning (disable : 4793)
54+
int RunTimeConnect::sqlite3_config(int arg, ...)
55+
{
56+
va_list ap;
57+
va_start(ap, arg);
58+
int r = SQLite3_config(arg, ap);
59+
va_end(ap);
60+
return r;
61+
}
62+
63+
char* RunTimeConnect::sqlite3_mprintf(const char* arg, ...)
64+
{
65+
va_list ap;
66+
va_start(ap, arg);
67+
char* r = SQLite3_mprintf(arg, ap);
68+
va_end(ap);
69+
return r;
70+
}
71+
72+
char* RunTimeConnect::sqlite3_snprintf(int i, char* arg, const char* arg2, ...)
73+
{
74+
va_list ap;
75+
va_start(ap, arg2);
76+
char* r = SQLite3_snprintf(i, arg, arg2, ap);
77+
va_end(ap);
78+
return r;
79+
}
80+
81+
int RunTimeConnect::sqlite3_db_config(sqlite3* db, int arg, ...)
82+
{
83+
va_list ap;
84+
va_start(ap, arg);
85+
int r = SQLite3_db_config(db, arg, ap);
86+
va_end(ap);
87+
return r;
88+
}
89+
90+
void RunTimeConnect::sqlite3_log(int iErrCode, const char* arg, ...)
91+
{
92+
va_list ap;
93+
va_start(ap, arg);
94+
SQLite3_log(iErrCode, arg, ap);
95+
va_end(ap);
96+
}
97+
98+
int RunTimeConnect::sqlite3_vtab_config(sqlite3* db, int arg, ...)
99+
{
100+
va_list ap;
101+
va_start(ap, arg);
102+
int r = SQLite3_vtab_config(db, arg, ap);
103+
va_end(ap);
104+
return r;
105+
}
106+
107+
}

0 commit comments

Comments
 (0)