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
00015 #define CALL_TYPE // __stdcall
00016
00017 #define DynFunc0(ret, func) \
00018 ret func() \
00019 { \
00020 typedef ret (CALL_TYPE *p_##func)(); \
00021 p_##func p = (p_##func) GetAddress(#func); \
00022 if (p) \
00023 { \
00024 return p(); \
00025 } \
00026 BreakPoint \
00027 return 0; \
00028 }
00029
00030 #define DynFunc1(ret, func, argtype, argname) \
00031 ret func(argtype argname) \
00032 { \
00033 typedef ret (CALL_TYPE *p_##func)(argtype); \
00034 p_##func p = (p_##func) GetAddress(#func); \
00035 if (p) \
00036 { \
00037 return p(argname); \
00038 } \
00039 BreakPoint \
00040 return 0; \
00041 }
00042
00043 #define DynFunc2(ret, func, argtype1, argname1, argtype2, argname2) \
00044 ret func(argtype1 argname1, argtype2 argname2) \
00045 { \
00046 typedef ret (CALL_TYPE *p_##func)(argtype1, argtype2); \
00047 p_##func p = (p_##func) GetAddress(#func); \
00048 if (p) \
00049 { \
00050 return p(argname1, argname2); \
00051 } \
00052 BreakPoint \
00053 return 0; \
00054 }
00055
00056 #define DynFunc3(ret, func, argtype1, argname1, \
00057 argtype2, argname2, \
00058 argtype3, argname3) \
00059 ret func(argtype1 argname1, \
00060 argtype2 argname2, \
00061 argtype3 argname3) \
00062 { \
00063 typedef ret (CALL_TYPE *p_##func)(argtype1, \
00064 argtype2, \
00065 argtype3); \
00066 p_##func p = (p_##func) GetAddress(#func); \
00067 if (p) \
00068 { \
00069 return p(argname1, argname2, argname3); \
00070 } \
00071 BreakPoint \
00072 return 0; \
00073 }
00074
00075 #define DynFunc4(ret, func, argtype1, argname1, \
00076 argtype2, argname2, \
00077 argtype3, argname3, \
00078 argtype4, argname4) \
00079 ret func(argtype1 argname1, \
00080 argtype2 argname2, \
00081 argtype3 argname3, \
00082 argtype4 argname4) \
00083 { \
00084 typedef ret (CALL_TYPE *p_##func)(argtype1, \
00085 argtype2, \
00086 argtype3, \
00087 argtype4); \
00088 p_##func p = (p_##func) GetAddress(#func); \
00089 if (p) \
00090 { \
00091 return p(argname1, argname2, \
00092 argname3, argname4); \
00093 } \
00094 BreakPoint \
00095 return 0; \
00096 }
00097
00098 #define DynFunc5(ret, func, argtype1, argname1, \
00099 argtype2, argname2, \
00100 argtype3, argname3, \
00101 argtype4, argname4, \
00102 argtype5, argname5) \
00103 ret func(argtype1 argname1, \
00104 argtype2 argname2, \
00105 argtype3 argname3, \
00106 argtype4 argname4, \
00107 argtype5 argname5) \
00108 { \
00109 typedef ret (CALL_TYPE *p_##func)(argtype1, \
00110 argtype2, \
00111 argtype3, \
00112 argtype4, \
00113 argtype5); \
00114 p_##func p = (p_##func) GetAddress(#func); \
00115 if (p) \
00116 { \
00117 return p(argname1, argname2, \
00118 argname3, argname4, \
00119 argname5); \
00120 } \
00121 BreakPoint \
00122 return 0; \
00123 }
00124
00125 #define DynFunc6(ret, func, argtype1, argname1, \
00126 argtype2, argname2, \
00127 argtype3, argname3, \
00128 argtype4, argname4, \
00129 argtype5, argname5, \
00130 argtype6, argname6) \
00131 ret func(argtype1 argname1, \
00132 argtype2 argname2, \
00133 argtype3 argname3, \
00134 argtype4 argname4, \
00135 argtype5 argname5, \
00136 argtype6 argname6) \
00137 { \
00138 typedef ret (CALL_TYPE *p_##func)(argtype1, \
00139 argtype2, \
00140 argtype3, \
00141 argtype4, \
00142 argtype5, \
00143 argtype6); \
00144 p_##func p = (p_##func) GetAddress(#func); \
00145 if (p) \
00146 { \
00147 return p(argname1, argname2, \
00148 argname3, argname4, \
00149 argname5, argname6); \
00150 } \
00151 BreakPoint \
00152 return 0; \
00153 }
00154
00155
00156 #endif