00001 #ifndef GFILTER_UTILS_H
00002 #define GFILTER_UTILS_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #define BreakPoint LgiAssert(0);
00013
00014 #ifndef CALL_TYPE
00015 #define CALL_TYPE // __stdcall
00016 #endif
00017
00018 #define DynFunc0(ret, func) \
00019 ret func() \
00020 { \
00021 typedef ret (CALL_TYPE *p_##func)(); \
00022 p_##func p = (p_##func) GetAddress(#func); \
00023 if (p) \
00024 { \
00025 return p(); \
00026 } \
00027 BreakPoint \
00028 return 0; \
00029 }
00030
00031 #define DynFunc1(ret, func, argtype, argname) \
00032 ret func(argtype argname) \
00033 { \
00034 typedef ret (CALL_TYPE *p_##func)(argtype); \
00035 p_##func p = (p_##func) GetAddress(#func); \
00036 if (p) \
00037 { \
00038 return p(argname); \
00039 } \
00040 BreakPoint \
00041 return 0; \
00042 }
00043
00044 #define DynFunc2(ret, func, argtype1, argname1, argtype2, argname2) \
00045 ret func(argtype1 argname1, argtype2 argname2) \
00046 { \
00047 typedef ret (CALL_TYPE *p_##func)(argtype1, argtype2); \
00048 p_##func p = (p_##func) GetAddress(#func); \
00049 if (p) \
00050 { \
00051 return p(argname1, argname2); \
00052 } \
00053 BreakPoint \
00054 return 0; \
00055 }
00056
00057 #define DynFunc3(ret, func, argtype1, argname1, \
00058 argtype2, argname2, \
00059 argtype3, argname3) \
00060 ret func(argtype1 argname1, \
00061 argtype2 argname2, \
00062 argtype3 argname3) \
00063 { \
00064 typedef ret (CALL_TYPE *p_##func)(argtype1, \
00065 argtype2, \
00066 argtype3); \
00067 p_##func p = (p_##func) GetAddress(#func); \
00068 if (p) \
00069 { \
00070 return p(argname1, argname2, argname3); \
00071 } \
00072 BreakPoint \
00073 return 0; \
00074 }
00075
00076 #define DynFunc4(ret, func, argtype1, argname1, \
00077 argtype2, argname2, \
00078 argtype3, argname3, \
00079 argtype4, argname4) \
00080 ret func(argtype1 argname1, \
00081 argtype2 argname2, \
00082 argtype3 argname3, \
00083 argtype4 argname4) \
00084 { \
00085 typedef ret (CALL_TYPE *p_##func)(argtype1, \
00086 argtype2, \
00087 argtype3, \
00088 argtype4); \
00089 p_##func p = (p_##func) GetAddress(#func); \
00090 if (p) \
00091 { \
00092 return p(argname1, argname2, \
00093 argname3, argname4); \
00094 } \
00095 BreakPoint \
00096 return 0; \
00097 }
00098
00099 #define DynFunc5(ret, func, argtype1, argname1, \
00100 argtype2, argname2, \
00101 argtype3, argname3, \
00102 argtype4, argname4, \
00103 argtype5, argname5) \
00104 ret func(argtype1 argname1, \
00105 argtype2 argname2, \
00106 argtype3 argname3, \
00107 argtype4 argname4, \
00108 argtype5 argname5) \
00109 { \
00110 typedef ret (CALL_TYPE *p_##func)(argtype1, \
00111 argtype2, \
00112 argtype3, \
00113 argtype4, \
00114 argtype5); \
00115 p_##func p = (p_##func) GetAddress(#func); \
00116 if (p) \
00117 { \
00118 return p(argname1, argname2, \
00119 argname3, argname4, \
00120 argname5); \
00121 } \
00122 BreakPoint \
00123 return 0; \
00124 }
00125
00126 #define DynFunc6(ret, func, argtype1, argname1, \
00127 argtype2, argname2, \
00128 argtype3, argname3, \
00129 argtype4, argname4, \
00130 argtype5, argname5, \
00131 argtype6, argname6) \
00132 ret func(argtype1 argname1, \
00133 argtype2 argname2, \
00134 argtype3 argname3, \
00135 argtype4 argname4, \
00136 argtype5 argname5, \
00137 argtype6 argname6) \
00138 { \
00139 typedef ret (CALL_TYPE *p_##func)(argtype1, \
00140 argtype2, \
00141 argtype3, \
00142 argtype4, \
00143 argtype5, \
00144 argtype6); \
00145 p_##func p = (p_##func) GetAddress(#func); \
00146 if (p) \
00147 { \
00148 return p(argname1, argname2, \
00149 argname3, argname4, \
00150 argname5, argname6); \
00151 } \
00152 BreakPoint \
00153 return 0; \
00154 }
00155
00156
00157 #define DynFunc10(ret, func, argtype1, argname1, \
00158 argtype2, argname2, \
00159 argtype3, argname3, \
00160 argtype4, argname4, \
00161 argtype5, argname5, \
00162 argtype6, argname6, \
00163 argtype7, argname7, \
00164 argtype8, argname8, \
00165 argtype9, argname9, \
00166 argtype10, argname10) \
00167 ret func(argtype1 argname1, \
00168 argtype2 argname2, \
00169 argtype3 argname3, \
00170 argtype4 argname4, \
00171 argtype5 argname5, \
00172 argtype6 argname6, \
00173 argtype7 argname7, \
00174 argtype8 argname8, \
00175 argtype9 argname9, \
00176 argtype10 argname10) \
00177 { \
00178 typedef ret (CALL_TYPE *p_##func)(argtype1, \
00179 argtype2, \
00180 argtype3, \
00181 argtype4, \
00182 argtype5, \
00183 argtype6, \
00184 argtype7, \
00185 argtype8, \
00186 argtype9, \
00187 argtype10); \
00188 p_##func p = (p_##func) GetAddress(#func); \
00189 if (p) \
00190 { \
00191 return p(argname1, argname2, \
00192 argname3, argname4, \
00193 argname5, argname6, \
00194 argname7, argname8, \
00195 argname9, argname10); \
00196 } \
00197 BreakPoint \
00198 return 0; \
00199 }
00200
00201 #endif