fteqw/engine/server/win_mysql.h
TimeServ 7f73771ba2 mysql includes and libmysql.dll loader code for win32
added preliminary FTE_SQL code (not in a usable state), current problems: 
WINDOWS ONLY, database connect is hardcoded to a local server, conditional wait needed for worker thread (currently consumes 100% cpu), query requests and results should be a queue not a stack, sql init and deinit is in the wrong place, project and defines need updating, tons more things

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2941 fc73d0e0-1445-4013-8a0c-d673dee63da5
2008-04-14 07:47:30 +00:00

130 lines
No EOL
4 KiB
C

#ifndef MYSQLDLL_H
#define MYSQLDLL_H
#include <mysql.h>
HINSTANCE mysqldll;
int mysqldllerror;
#define MYSQLDLL_NOCONV
#define MYSQLDLL_LOADFUNC(funcname) \
int loaded_##funcname = 0; \
int funcload_##funcname() \
{ \
if (mysqldll) \
{ \
if (!loaded_##funcname) \
{ \
cb_##funcname = (DLLFUNC_##funcname)GetProcAddress(mysqldll, #funcname); \
loaded_##funcname = 1; \
mysqldllerror = GetLastError(); \
\
} \
return (cb_##funcname != NULL); \
} \
return 0; \
}
#define MYSQLDLL_FUNC0(returntype, funcname) \
typedef returntype (CALLBACK *DLLFUNC_##funcname)(); \
DLLFUNC_##funcname cb_##funcname; \
MYSQLDLL_LOADFUNC(funcname) \
returntype STDCALL funcname() \
{ \
if (funcload_##funcname()) \
return cb_##funcname(); \
return (returntype)0; \
}
#define MYSQLDLL_FUNC1(returntype, funcname, paramtype1) \
typedef returntype (CALLBACK *DLLFUNC_##funcname)(paramtype1); \
DLLFUNC_##funcname cb_##funcname; \
MYSQLDLL_LOADFUNC(funcname) \
returntype STDCALL funcname(paramtype1 p1) \
{ \
if (funcload_##funcname()) \
return cb_##funcname(p1); \
return (returntype)0; \
}
#define MYSQLDLL_FUNC2(returntype, funcname, paramtype1, paramtype2) \
typedef returntype (CALLBACK *DLLFUNC_##funcname)(paramtype1, paramtype2); \
DLLFUNC_##funcname cb_##funcname; \
MYSQLDLL_LOADFUNC(funcname) \
returntype STDCALL funcname(paramtype1 p1, paramtype2 p2) \
{ \
if (funcload_##funcname()) \
return cb_##funcname(p1, p2); \
return (returntype)0; \
}
#define MYSQLDLL_FUNC3(returntype, funcname, paramtype1, paramtype2, paramtype3) \
typedef returntype (CALLBACK *DLLFUNC_##funcname)(paramtype1, paramtype2, paramtype3); \
DLLFUNC_##funcname cb_##funcname; \
MYSQLDLL_LOADFUNC(funcname) \
returntype STDCALL funcname(paramtype1 p1, paramtype2 p2, paramtype3 p3) \
{ \
if (funcload_##funcname()) \
return cb_##funcname(p1, p2, p3); \
return (returntype)0; \
}
#define MYSQLDLL_FUNC4(returntype, funcname, paramtype1, paramtype2, paramtype3, paramtype4) \
typedef returntype (CALLBACK *DLLFUNC_##funcname)(paramtype1, paramtype2, paramtype3, paramtype4); \
DLLFUNC_##funcname cb_##funcname; \
MYSQLDLL_LOADFUNC(funcname) \
returntype STDCALL funcname(paramtype1 p1, paramtype2 p2, paramtype3 p3, paramtype4 p4) \
{ \
if (funcload_##funcname()) \
return cb_##funcname(p1, p2, p3, p4); \
return (returntype)0; \
}
#define MYSQLDLL_FUNC8(returntype, funcname, paramtype1, paramtype2, paramtype3, paramtype4, paramtype5, paramtype6, paramtype7, paramtype8) \
typedef returntype (CALLBACK *DLLFUNC_##funcname)(paramtype1, paramtype2, paramtype3, paramtype4, paramtype5, paramtype6, paramtype7, paramtype8); \
DLLFUNC_##funcname cb_##funcname; \
MYSQLDLL_LOADFUNC(funcname) \
returntype STDCALL funcname(paramtype1 p1, paramtype2 p2, paramtype3 p3, paramtype4 p4, paramtype5 p5, paramtype6 p6, paramtype7 p7, paramtype8 p8) \
{ \
if (funcload_##funcname()) \
return cb_##funcname(p1, p2, p3, p4, p5, p6, p7, p8); \
return (returntype)0; \
}
#define MYSQLDLL_NORETFUNC0(funcname) \
typedef void (CALLBACK *DLLFUNC_##funcname)(); \
DLLFUNC_##funcname cb_##funcname; \
MYSQLDLL_LOADFUNC(funcname) \
void STDCALL funcname() \
{ \
if (funcload_##funcname()) \
cb_##funcname(); \
}
#define MYSQLDLL_NORETFUNC1(funcname, paramtype1) \
typedef void (CALLBACK *DLLFUNC_##funcname)(paramtype1); \
DLLFUNC_##funcname cb_##funcname; \
MYSQLDLL_LOADFUNC(funcname) \
void STDCALL funcname(paramtype1 p1) \
{ \
if (funcload_##funcname()) \
cb_##funcname(p1); \
}
#define MYSQLDLL_NORETFUNC2(funcname, paramtype1, paramtype2) \
typedef void (CALLBACK *DLLFUNC_##funcname)(paramtype1, paramtype2); \
DLLFUNC_##funcname cb_##funcname; \
MYSQLDLL_LOADFUNC(funcname) \
void STDCALL funcname(paramtype1 p1, paramtype2 p2) \
{ \
if (funcload_##funcname()) \
cb_##funcname(p1, p2); \
}
// prototypes
int mysql_dll_init();
int mysql_dll_close();
#endif