#if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #ifndef __WotLib_h__ #define __WotLib_h__ #include ///////////////////////////////////////////////////////////////////////////// // WotLib.h | Declaration of the TCWotLib class used to wrap the // calling of functions from a single window thread for use with libraries // which require a single thread of execution. // ///////////////////////////////////////////////////////////////////////////// // Encapsulates the use of a DLL's exported functions through a window's // message thread. // // To use this class, first derive your own class from it. Then, in the // declaration of your derived class, use the TCWotLib_Fn macros to declare // the function prototypes of the API exports that you wish to expose from // your derived class. // class TCWotLib { // Group=Construction public: TCWotLib(); TCWotLib(HWND hWnd); void SetWnd(HWND hWnd); // Group=Data Members protected: HWND m_hWnd; // The window which will receive function msg requests. }; ///////////////////////////////////////////////////////////////////////////// // Group=Construction inline TCWotLib::TCWotLib() : m_hWnd(NULL) { } inline TCWotLib::TCWotLib(HWND hWnd) : m_hWnd(hWnd) { } inline void TCWotLib::SetWnd(HWND hWnd) { m_hWnd = hWnd; } ///////////////////////////////////////////////////////////////////////////// // Internal Helper macros #define TCWOTLIB_HANDLER(Name) \ MESSAGE_HANDLER(wm_##Name, On##Name) \ ///////////////////////////////////////////////////////////////////////////// // Internal Helper macros #define TCWotCall(retType, Name,nArgs) \ return (retType)::SendMessage(m_hWnd, wm_##Name, (WPARAM)&p1, nArgs) #define TCWotCall_void(Name,nArgs) \ ::SendMessage(m_hWnd, wm_##Name, (WPARAM)&p1, nArgs) #define TCWotPreCall(retType, pre, Name, nArgs) \ return (retType)::SendMessage(m_hWnd, wm_##pre##Name, (WPARAM)&p1, nArgs) #define TCWotPreCall_void(pre, Name, nArgs) \ ::SendMessage(m_hWnd, wm_##pre##Name, (WPARAM)&p1, nArgs) ///////////////////////////////////////////////////////////////////////////// // Non-prefixed functions with return-value #define TCWotLib_Fn0(retType, Name) \ retType Name(void) \ { return (retType)::SendMessage(m_hWnd, wm_##Name, 0, 0L); } #define TCWotLib_Fn1(retType, Name, T1) \ retType Name(T1 p1) \ { TCWotCall(retType, Name, 1); } #define TCWotLib_Fn2(retType, Name, T1,T2) \ retType Name(T1 p1,T2) \ { TCWotCall(retType, Name, 2); } #define TCWotLib_Fn3(retType, Name, T1,T2,T3) \ retType Name(T1 p1,T2,T3) \ { TCWotCall(retType, Name, 3); } #define TCWotLib_Fn4(retType, Name, T1,T2,T3,T4) \ retType Name(T1 p1,T2,T3,T4) \ { TCWotCall(retType, Name, 4); } #define TCWotLib_Fn5(retType, Name, T1,T2,T3,T4,T5) \ retType Name(T1 p1,T2,T3,T4,T5) \ { TCWotCall(retType, Name, 5); } #define TCWotLib_Fn6(retType, Name, T1,T2,T3,T4,T5,T6) \ retType Name(T1 p1,T2,T3,T4,T5,T6) \ { TCWotCall(retType, Name, 6); } #define TCWotLib_Fn7(retType, Name, T1,T2,T3,T4,T5,T6,T7) \ retType Name(T1 p1,T2,T3,T4,T5,T6,T7) \ { TCWotCall(retType, Name, 7); } #define TCWotLib_Fn8(retType, Name, T1,T2,T3,T4,T5,T6,T7,T8) \ retType Name(T1 p1,T2,T3,T4,T5,T6,T7,T8) \ { TCWotCall(retType, Name, 8); } #define TCWotLib_Fn9(retType, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9) \ retType Name(T1 p1,T2,T3,T4,T5,T6,T7,T8,T9) \ { TCWotCall(retType, Name, 9); } #define TCWotLib_Fn10(retType, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10) \ retType Name(T1 p1,T2,T3,T4,T5,T6,T7,T8,T9,T10) \ { TCWotCall(retType, Name, 10); } #define TCWotLib_Fn11(retType, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11) \ retType Name(T1 p1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11) \ { TCWotCall(retType, Name, 11); } #define TCWotLib_Fn12(retType, Name,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12) \ retType Name(T1 p1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12) \ { TCWotCall(retType, Name, 12); } ///////////////////////////////////////////////////////////////////////////// // Non-prefixed void functions #define TCWotLib_Fn0_void(retType, Name) \ void Name(void) \ { ::SendMessage(m_hWnd, wm_##Name, 0, 0L); } #define TCWotLib_Fn1_void(retType, Name, T1) \ void Name(T1 p1) \ { TCWotCall_void(Name, 1); } #define TCWotLib_Fn2_void(retType, Name, T1,T2) \ void Name(T1 p1,T2) \ { TCWotCall_void(Name, 2); } #define TCWotLib_Fn3_void(retType, Name, T1,T2,T3) \ void Name(T1 p1,T2,T3) \ { TCWotCall_void(Name, 3); } #define TCWotLib_Fn4_void(retType, Name, T1,T2,T3,T4) \ void Name(T1 p1,T2,T3,T4) \ { TCWotCall_void(Name, 4); } #define TCWotLib_Fn5_void(retType, Name, T1,T2,T3,T4,T5) \ void Name(T1 p1,T2,T3,T4,T5) \ { TCWotCall_void(Name, 5); } #define TCWotLib_Fn6_void(retType, Name, T1,T2,T3,T4,T5,T6) \ void Name(T1 p1,T2,T3,T4,T5,T6) \ { TCWotCall_void(Name, 6); } #define TCWotLib_Fn7_void(retType, Name, T1,T2,T3,T4,T5,T6,T7) \ void Name(T1 p1,T2,T3,T4,T5,T6,T7) \ { TCWotCall_void(Name, 7); } #define TCWotLib_Fn8_void(retType, Name, T1,T2,T3,T4,T5,T6,T7,T8) \ void Name(T1 p1,T2,T3,T4,T5,T6,T7,T8) \ { TCWotCall_void(Name, 8); } #define TCWotLib_Fn9_void(retType, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9) \ void Name(T1 p1,T2,T3,T4,T5,T6,T7,T8,T9) \ { TCWotCall_void(Name, 9); } #define TCWotLib_Fn10_void(retType, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10) \ void Name(T1 p1,T2,T3,T4,T5,T6,T7,T8,T9,T10) \ { TCWotCall_void(Name, 10); } #define TCWotLib_Fn11_void(retType, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11) \ void Name(T1 p1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11) \ { TCWotCall_void(Name, 11); } #define TCWotLib_Fn12_void(retType, Name,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12) \ void Name(T1 p1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12) \ { TCWotCall_void(Name, 12); } ///////////////////////////////////////////////////////////////////////////// // Prefixed functions with return-value #define TCWotLib_PreFn0(retType, pre, Name) \ retType Name(void) \ { return (retType)::SendMessage(m_hWnd, wm_##pre##Name, 0, 0L); } #define TCWotLib_PreFn1(retType, pre, Name, T1) \ retType Name(T1 p1) \ { TCWotPreCall(retType, pre, Name, 1); } #define TCWotLib_PreFn2(retType, pre, Name, T1,T2) \ retType Name(T1 p1,T2) \ { TCWotPreCall(retType, pre, Name, 2); } #define TCWotLib_PreFn3(retType, pre, Name, T1,T2,T3) \ retType Name(T1 p1,T2,T3) \ { TCWotPreCall(retType, pre, Name, 3); } #define TCWotLib_PreFn4(retType, pre, Name, T1,T2,T3,T4) \ retType Name(T1 p1,T2,T3,T4) \ { TCWotPreCall(retType, pre, Name, 4); } #define TCWotLib_PreFn5(retType, pre, Name, T1,T2,T3,T4,T5) \ retType Name(T1 p1,T2,T3,T4,T5) \ { TCWotPreCall(retType, pre, Name, 5); } #define TCWotLib_PreFn6(retType, pre, Name, T1,T2,T3,T4,T5,T6) \ retType Name(T1 p1,T2,T3,T4,T5,T6) \ { TCWotPreCall(retType, pre, Name, 6); } #define TCWotLib_PreFn7(retType, pre, Name, T1,T2,T3,T4,T5,T6,T7) \ retType Name(T1 p1,T2,T3,T4,T5,T6,T7) \ { TCWotPreCall(retType, pre, Name, 7); } #define TCWotLib_PreFn8(retType, pre, Name, T1,T2,T3,T4,T5,T6,T7,T8) \ retType Name(T1 p1,T2,T3,T4,T5,T6,T7,T8) \ { TCWotPreCall(retType, pre, Name, 8); } #define TCWotLib_PreFn9(retType, pre, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9) \ retType Name(T1 p1,T2,T3,T4,T5,T6,T7,T8,T9) \ { TCWotPreCall(retType, pre, Name, 9); } #define TCWotLib_PreFn10(retType, pre, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10) \ retType Name(T1 p1,T2,T3,T4,T5,T6,T7,T8,T9,T10) \ { TCWotPreCall(retType, pre, Name, 10); } #define TCWotLib_PreFn11(retType, pre, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11) \ retType Name(T1 p1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11) \ { TCWotPreCall(retType, pre, Name, 11); } #define TCWotLib_PreFn12(retType, pre, Name,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12) \ retType Name(T1 p1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12) \ { TCWotPreCall(retType, pre, Name, 12); } ///////////////////////////////////////////////////////////////////////////// // Prefixed void functions #define TCWotLib_PreFn0_void(pre, Name) \ void Name(void) \ { ::SendMessage(m_hWnd, wm_##pre##Name, 0, 0L); } #define TCWotLib_PreFn1_void(pre, Name, T1) \ void Name(T1 p1) \ { TCWotPreCall_void(pre, Name, 1); } #define TCWotLib_PreFn2_void(pre, Name, T1,T2) \ void Name(T1 p1,T2) \ { TCWotPreCall_void(pre, Name, 2); } #define TCWotLib_PreFn3_void(pre, Name, T1,T2,T3) \ void Name(T1 p1,T2,T3) \ { TCWotPreCall_void(pre, Name, 3); } #define TCWotLib_PreFn4_void(pre, Name, T1,T2,T3,T4) \ void Name(T1 p1,T2,T3,T4) \ { TCWotPreCall_void(pre, Name, 4); } #define TCWotLib_PreFn5_void(pre, Name, T1,T2,T3,T4,T5) \ void Name(T1 p1,T2,T3,T4,T5) \ { TCWotPreCall_void(pre, Name, 5); } #define TCWotLib_PreFn6_void(pre, Name, T1,T2,T3,T4,T5,T6) \ void Name(T1 p1,T2,T3,T4,T5,T6) \ { TCWotPreCall_void(pre, Name, 6); } #define TCWotLib_PreFn7_void(pre, Name, T1,T2,T3,T4,T5,T6,T7) \ void Name(T1 p1,T2,T3,T4,T5,T6,T7) \ { TCWotPreCall_void(pre, Name, 7); } #define TCWotLib_PreFn8_void(pre, Name, T1,T2,T3,T4,T5,T6,T7,T8) \ void Name(T1 p1,T2,T3,T4,T5,T6,T7,T8) \ { TCWotPreCall_void(pre, Name, 8); } #define TCWotLib_PreFn9_void(pre, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9) \ void Name(T1 p1,T2,T3,T4,T5,T6,T7,T8,T9) \ { TCWotPreCall_void(pre, Name, 9); } #define TCWotLib_PreFn10_void(pre, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10) \ void Name(T1 p1,T2,T3,T4,T5,T6,T7,T8,T9,T10) \ { TCWotPreCall_void(pre, Name, 10); } #define TCWotLib_PreFn11_void(pre, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11) \ void Name(T1 p1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11) \ { TCWotPreCall_void(pre, Name, 11); } #define TCWotLib_PreFn12_void(pre, Name,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12) \ void Name(T1 p1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12) \ { TCWotPreCall_void(pre, Name, 12); } ///////////////////////////////////////////////////////////////////////////// // Non-prefixed handlers with return-values #define TCWotLib_DecHandler0(DynaLib, Name) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(wParam == 0 && lParam == 0); \ return (LRESULT)DynaLib.Name(); \ } #define TCWotLib_DecHandler1(DynaLib, Name, T1) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 1); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ return (LRESULT)DynaLib.Name(p1); \ } #define TCWotLib_DecHandler2(DynaLib, Name, T1,T2) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 2); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ return (LRESULT)DynaLib.Name(p1,p2); \ } #define TCWotLib_DecHandler3(DynaLib, Name, T1,T2,T3) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 3); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ return (LRESULT)DynaLib.Name(p1,p2,p3); \ } #define TCWotLib_DecHandler4(DynaLib, Name, T1,T2,T3,T4) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 4); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ return (LRESULT)DynaLib.Name(p1,p2,p3,p4); \ } #define TCWotLib_DecHandler5(DynaLib, Name, T1,T2,T3,T4,T5) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 5); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ return (LRESULT)DynaLib.Name(p1,p2,p3,p4,p5); \ } #define TCWotLib_DecHandler6(DynaLib, Name, T1,T2,T3,T4,T5,T6) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 6); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ return (LRESULT)DynaLib.Name(p1,p2,p3,p4,p5,p6); \ } #define TCWotLib_DecHandler7(DynaLib, Name, T1,T2,T3,T4,T5,T6,T7) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 7); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ return (LRESULT)DynaLib.Name(p1,p2,p3,p4,p5,p6,p7); \ } #define TCWotLib_DecHandler8(DynaLib, Name, T1,T2,T3,T4,T5,T6,T7,T8) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 8); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ return (LRESULT)DynaLib.Name(p1,p2,p3,p4,p5,p6,p7,p8); \ } #define TCWotLib_DecHandler9(DynaLib, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 9); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ T9 p9 = va_arg(ArgList, T9); \ return (LRESULT)DynaLib.Name(p1,p2,p3,p4,p5,p6,p7,p8,p9); \ } #define TCWotLib_DecHandler10(DynaLib, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 10); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ T9 p9 = va_arg(ArgList, T9); \ T10 p10 = va_arg(ArgList, T10); \ return (LRESULT)DynaLib.Name(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10); \ } #define TCWotLib_DecHandler11(DynaLib, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 11); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ T9 p9 = va_arg(ArgList, T9); \ T10 p10 = va_arg(ArgList, T10); \ T11 p11 = va_arg(ArgList, T11); \ return (LRESULT)DynaLib.Name(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11); \ } #define TCWotLib_DecHandler12(DynaLib, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 12); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ T9 p9 = va_arg(ArgList, T9); \ T10 p10 = va_arg(ArgList, T10); \ T11 p11 = va_arg(ArgList, T11); \ T12 p12 = va_arg(ArgList, T12); \ return (LRESULT)DynaLib.Name(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12); \ } ///////////////////////////////////////////////////////////////////////////// // Non-prefixed handlers for void functions #define TCWotLib_DecHandler0_void(DynaLib, Name) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(wParam == 0 && lParam == 0); \ DynaLib.Name(); \ return 0; \ } #define TCWotLib_DecHandler1_void(DynaLib, Name, T1) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 1); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ DynaLib.Name(p1); \ return 0; \ } #define TCWotLib_DecHandler2_void(DynaLib, Name, T1,T2) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 2); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ DynaLib.Name(p1,p2); \ return 0; \ } #define TCWotLib_DecHandler3_void(DynaLib, Name, T1,T2,T3) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 3); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ DynaLib.Name(p1,p2,p3); \ return 0; \ } #define TCWotLib_DecHandler4_void(DynaLib, Name, T1,T2,T3,T4) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 4); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ DynaLib.Name(p1,p2,p3,p4); \ return 0; \ } #define TCWotLib_DecHandler5_void(DynaLib, Name, T1,T2,T3,T4,T5) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 5); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ DynaLib.Name(p1,p2,p3,p4,p5); \ return 0; \ } #define TCWotLib_DecHandler6_void(DynaLib, Name, T1,T2,T3,T4,T5,T6) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 6); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ DynaLib.Name(p1,p2,p3,p4,p5,p6); \ return 0; \ } #define TCWotLib_DecHandler7_void(DynaLib, Name, T1,T2,T3,T4,T5,T6,T7) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 7); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ DynaLib.Name(p1,p2,p3,p4,p5,p6,p7); \ return 0; \ } #define TCWotLib_DecHandler8_void(DynaLib, Name, T1,T2,T3,T4,T5,T6,T7,T8) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 8); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ DynaLib.Name(p1,p2,p3,p4,p5,p6,p7,p8); \ return 0; \ } #define TCWotLib_DecHandler9_void(DynaLib, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 9); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ T9 p9 = va_arg(ArgList, T9); \ DynaLib.Name(p1,p2,p3,p4,p5,p6,p7,p8,p9); \ return 0; \ } #define TCWotLib_DecHandler10_void(DynaLib, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 10); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ T9 p9 = va_arg(ArgList, T9); \ T10 p10 = va_arg(ArgList, T10); \ DynaLib.Name(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10); \ return 0; \ } #define TCWotLib_DecHandler11_void(DynaLib, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 11); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ T9 p9 = va_arg(ArgList, T9); \ T10 p10 = va_arg(ArgList, T10); \ T11 p11 = va_arg(ArgList, T11); \ DynaLib.Name(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11); \ return 0; \ } #define TCWotLib_DecHandler12_void(DynaLib, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12) \ LRESULT On##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 12); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ T9 p9 = va_arg(ArgList, T9); \ T10 p10 = va_arg(ArgList, T10); \ T11 p11 = va_arg(ArgList, T11); \ T12 p12 = va_arg(ArgList, T12); \ DynaLib.Name(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12); \ return 0; \ } ///////////////////////////////////////////////////////////////////////////// // Prefixed handlers with return-values #define TCWotLib_DecPreHandler0(retType, pre, Name) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(wParam == 0 && lParam == 0); \ return (LRESULT)m_##pre.Name(); \ } #define TCWotLib_DecPreHandler1(retType, pre, Name, T1) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 1); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ return (LRESULT)m_##pre.Name(p1); \ } #define TCWotLib_DecPreHandler2(retType, pre, Name, T1,T2) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 2); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ return (LRESULT)m_##pre.Name(p1,p2); \ } #define TCWotLib_DecPreHandler3(retType, pre, Name, T1,T2,T3) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 3); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ return (LRESULT)m_##pre.Name(p1,p2,p3); \ } #define TCWotLib_DecPreHandler4(retType, pre, Name, T1,T2,T3,T4) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 4); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ return (LRESULT)m_##pre.Name(p1,p2,p3,p4); \ } #define TCWotLib_DecPreHandler5(retType, pre, Name, T1,T2,T3,T4,T5) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 5); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ return (LRESULT)m_##pre.Name(p1,p2,p3,p4,p5); \ } #define TCWotLib_DecPreHandler6(retType, pre, Name, T1,T2,T3,T4,T5,T6) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 6); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ return (LRESULT)m_##pre.Name(p1,p2,p3,p4,p5,p6); \ } #define TCWotLib_DecPreHandler7(retType, pre, Name, T1,T2,T3,T4,T5,T6,T7) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 7); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ return (LRESULT)m_##pre.Name(p1,p2,p3,p4,p5,p6,p7); \ } #define TCWotLib_DecPreHandler8(retType, pre, Name, T1,T2,T3,T4,T5,T6,T7,T8) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 8); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ return (LRESULT)m_##pre.Name(p1,p2,p3,p4,p5,p6,p7,p8); \ } #define TCWotLib_DecPreHandler9(retType, pre, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 9); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ T9 p9 = va_arg(ArgList, T9); \ return (LRESULT)m_##pre.Name(p1,p2,p3,p4,p5,p6,p7,p8,p9); \ } #define TCWotLib_DecPreHandler10(retType, pre, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 10); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ T9 p9 = va_arg(ArgList, T9); \ T10 p10 = va_arg(ArgList, T10); \ return (LRESULT)m_##pre.Name(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10); \ } #define TCWotLib_DecPreHandler11(retType, pre, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 11); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ T9 p9 = va_arg(ArgList, T9); \ T10 p10 = va_arg(ArgList, T10); \ T11 p11 = va_arg(ArgList, T11); \ return (LRESULT)m_##pre.Name(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11); \ } #define TCWotLib_DecPreHandler12(retType, pre, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 12); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ T9 p9 = va_arg(ArgList, T9); \ T10 p10 = va_arg(ArgList, T10); \ T11 p11 = va_arg(ArgList, T11); \ T12 p12 = va_arg(ArgList, T12); \ return (LRESULT)m_##pre.Name(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12); \ } ///////////////////////////////////////////////////////////////////////////// // Non-prefixed handlers for void functions #define TCWotLib_DecPreHandler0_void(pre, Name) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(wParam == 0 && lParam == 0); \ m_##pre.Name(); \ return 0; \ } #define TCWotLib_DecPreHandler1_void(pre, Name, T1) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 1); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ m_##pre.Name(p1); \ return 0; \ } #define TCWotLib_DecPreHandler2_void(pre, Name, T1,T2) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 2); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ m_##pre.Name(p1,p2); \ return 0; \ } #define TCWotLib_DecPreHandler3_void(pre, Name, T1,T2,T3) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 3); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ m_##pre.Name(p1,p2,p3); \ return 0; \ } #define TCWotLib_DecPreHandler4_void(pre, Name, T1,T2,T3,T4) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 4); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ m_##pre.Name(p1,p2,p3,p4); \ return 0; \ } #define TCWotLib_DecPreHandler5_void(pre, Name, T1,T2,T3,T4,T5) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 5); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ m_##pre.Name(p1,p2,p3,p4,p5); \ return 0; \ } #define TCWotLib_DecPreHandler6_void(pre, Name, T1,T2,T3,T4,T5,T6) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 6); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ m_##pre.Name(p1,p2,p3,p4,p5,p6); \ return 0; \ } #define TCWotLib_DecPreHandler7_void(pre, Name, T1,T2,T3,T4,T5,T6,T7) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 7); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ m_##pre.Name(p1,p2,p3,p4,p5,p6,p7); \ return 0; \ } #define TCWotLib_DecPreHandler8_void(pre, Name, T1,T2,T3,T4,T5,T6,T7,T8) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 8); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ m_##pre.Name(p1,p2,p3,p4,p5,p6,p7,p8); \ return 0; \ } #define TCWotLib_DecPreHandler9_void(pre, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 9); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ T9 p9 = va_arg(ArgList, T9); \ m_##pre.Name(p1,p2,p3,p4,p5,p6,p7,p8,p9); \ return 0; \ } #define TCWotLib_DecPreHandler10_void(pre, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 10); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ T9 p9 = va_arg(ArgList, T9); \ T10 p10 = va_arg(ArgList, T10); \ m_##pre.Name(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10); \ return 0; \ } #define TCWotLib_DecPreHandler11_void(pre, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 11); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ T9 p9 = va_arg(ArgList, T9); \ T10 p10 = va_arg(ArgList, T10); \ T11 p11 = va_arg(ArgList, T11); \ m_##pre.Name(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11); \ return 0; \ } #define TCWotLib_DecPreHandler12_void(pre, Name, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12) \ LRESULT On##pre##Name(UINT, WPARAM wParam, LPARAM lParam, BOOL &) \ { \ assert(lParam == 12); \ va_list ArgList = (va_list)wParam; \ T1 p1 = va_arg(ArgList, T1); \ T2 p2 = va_arg(ArgList, T2); \ T3 p3 = va_arg(ArgList, T3); \ T4 p4 = va_arg(ArgList, T4); \ T5 p5 = va_arg(ArgList, T5); \ T6 p6 = va_arg(ArgList, T6); \ T7 p7 = va_arg(ArgList, T7); \ T8 p8 = va_arg(ArgList, T8); \ T9 p9 = va_arg(ArgList, T9); \ T10 p10 = va_arg(ArgList, T10); \ T11 p11 = va_arg(ArgList, T11); \ T12 p12 = va_arg(ArgList, T12); \ m_##pre.Name(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12); \ return 0; \ } ///////////////////////////////////////////////////////////////////////////// #endif // !__WotLib_h__