12 #include "cores/DllLoader/LibraryLoader.h"    28 #define DECLARE_DLL_WRAPPER(classname, dllname) \    29 XDECLARE_DLL_WRAPPER(classname,dllname)    31 #define XDECLARE_DLL_WRAPPER(classname, dllname) \    33   classname () : DllDynamic( dllname ) {}    48 #define DECLARE_DLL_WRAPPER_TEMPLATE(classname) \    58 #define LOAD_SYMBOLS() \    60     virtual bool LoadSymbols() { return true; }    73 #define DEFINE_GLOBAL_PTR(type, name) \    77       void* m_##name##_ptr; \    80     virtual type* Get_##name (void) \    85 #define DEFINE_GLOBAL(type, name) \    89       void* m_##name##_ptr; \    92     virtual type Get_##name (void) \   110 #define DEFINE_METHOD_LINKAGE_FP(result, linkage, name, args) \   112     typedef result (linkage * name##_METHOD) args; \   115       name##_METHOD m_##name; \   116       void*         m_##name##_ptr; \   119 #define DEFINE_METHOD_LINKAGE_BASE(result, linkage, name, args, args2) \   121     typedef result (linkage * name##_METHOD) args; \   123       name##_METHOD m_##name; \   124       void*         m_##name##_ptr; \   127     virtual result name args override \   129       return m_##name ? m_##name args2 : (result) 0; \   132 #define DEFINE_METHOD_LINKAGE0(result, linkage, name) \   133         DEFINE_METHOD_LINKAGE_BASE(result, linkage, name, ()  , ())   135 #define DEFINE_METHOD_LINKAGE1(result, linkage, name, args) \   136         DEFINE_METHOD_LINKAGE_BASE(result, linkage, name, args, (p1))   138 #define DEFINE_METHOD_LINKAGE2(result, linkage, name, args) \   139         DEFINE_METHOD_LINKAGE_BASE(result, linkage, name, args, (p1, p2))   141 #define DEFINE_METHOD_LINKAGE3(result, linkage, name, args) \   142         DEFINE_METHOD_LINKAGE_BASE(result, linkage, name, args, (p1, p2, p3))   144 #define DEFINE_METHOD_LINKAGE4(result, linkage, name, args) \   145         DEFINE_METHOD_LINKAGE_BASE(result, linkage, name, args, (p1, p2, p3, p4))   147 #define DEFINE_METHOD_LINKAGE5(result, linkage, name, args) \   148         DEFINE_METHOD_LINKAGE_BASE(result, linkage, name, args, (p1, p2, p3, p4, p5))   150 #define DEFINE_METHOD_LINKAGE6(result, linkage, name, args) \   151         DEFINE_METHOD_LINKAGE_BASE(result, linkage, name, args, (p1, p2, p3, p4, p5, p6))   153 #define DEFINE_METHOD_LINKAGE7(result, linkage, name, args) \   154         DEFINE_METHOD_LINKAGE_BASE(result, linkage, name, args, (p1, p2, p3, p4, p5, p6, p7))   156 #define DEFINE_METHOD_LINKAGE8(result, linkage, name, args) \   157         DEFINE_METHOD_LINKAGE_BASE(result, linkage, name, args, (p1, p2, p3, p4, p5, p6, p7, p8))   159 #define DEFINE_METHOD_LINKAGE9(result, linkage, name, args) \   160         DEFINE_METHOD_LINKAGE_BASE(result, linkage, name, args, (p1, p2, p3, p4, p5, p6, p7, p8, p9))   162 #define DEFINE_METHOD_LINKAGE10(result, linkage, name, args) \   163         DEFINE_METHOD_LINKAGE_BASE(result, linkage, name, args, (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10))   165 #define DEFINE_METHOD_LINKAGE11(result, linkage, name, args) \   166         DEFINE_METHOD_LINKAGE_BASE(result, linkage, name, args, (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11))   181 #define DEFINE_METHOD_FP(result, name, args) DEFINE_METHOD_LINKAGE_FP(result, __cdecl, name, args)   197 #define DEFINE_METHOD0(result, name) DEFINE_METHOD_LINKAGE0(result, __cdecl, name)   198 #define DEFINE_METHOD1(result, name, args) DEFINE_METHOD_LINKAGE1(result, __cdecl, name, args)   199 #define DEFINE_METHOD2(result, name, args) DEFINE_METHOD_LINKAGE2(result, __cdecl, name, args)   200 #define DEFINE_METHOD3(result, name, args) DEFINE_METHOD_LINKAGE3(result, __cdecl, name, args)   201 #define DEFINE_METHOD4(result, name, args) DEFINE_METHOD_LINKAGE4(result, __cdecl, name, args)   202 #define DEFINE_METHOD5(result, name, args) DEFINE_METHOD_LINKAGE5(result, __cdecl, name, args)   203 #define DEFINE_METHOD6(result, name, args) DEFINE_METHOD_LINKAGE6(result, __cdecl, name, args)   204 #define DEFINE_METHOD7(result, name, args) DEFINE_METHOD_LINKAGE7(result, __cdecl, name, args)   205 #define DEFINE_METHOD8(result, name, args) DEFINE_METHOD_LINKAGE8(result, __cdecl, name, args)   206 #define DEFINE_METHOD9(result, name, args) DEFINE_METHOD_LINKAGE9(result, __cdecl, name, args)   207 #define DEFINE_METHOD10(result, name, args) DEFINE_METHOD_LINKAGE10(result, __cdecl, name, args)   208 #define DEFINE_METHOD11(result, name, args) DEFINE_METHOD_LINKAGE11(result, __cdecl, name, args)   210 #ifdef TARGET_WINDOWS   240 #define ALS(a) ((sizeof(a)+3)&~3)   241 #define DEFINE_FUNC_PART1(result, linkage, name, args) \   243     typedef result (linkage * name##_type)##args;      \   245       name##_type m_##name;                            \   246       void*       m_##name##_ptr;                      \   249     virtual result name##args   251 #define DEFINE_FUNC_PART2(size) \   261 #define DEFINE_FUNC_PART3(name,args) \   268 #define DEFINE_FUNC_ALIGNED0(result, linkage, name) \   269     DEFINE_FUNC_PART1(result, linkage, name, ()) \   270     DEFINE_FUNC_PART2(0) \   271     DEFINE_FUNC_PART3(name,())   273 #define DEFINE_FUNC_ALIGNED1(result, linkage, name, t1) \   274     DEFINE_FUNC_PART1(result, linkage, name, (t1 p1)) \   275     DEFINE_FUNC_PART2(ALS(p1)) \   276     DEFINE_FUNC_PART3(name,(p1))   278 #define DEFINE_FUNC_ALIGNED2(result, linkage, name, t1, t2) \   279     DEFINE_FUNC_PART1(result, linkage, name, (t1 p1, t2 p2)) \   280     DEFINE_FUNC_PART2(ALS(p1)+ALS(p2)) \   281     DEFINE_FUNC_PART3(name,(p1, p2))   283 #define DEFINE_FUNC_ALIGNED3(result, linkage, name, t1, t2, t3) \   284     DEFINE_FUNC_PART1(result, linkage, name, (t1 p1, t2 p2, t3 p3)) \   285     DEFINE_FUNC_PART2(ALS(p1)+ALS(p2)+ALS(p3)) \   286     DEFINE_FUNC_PART3(name,(p1, p2, p3))   288 #define DEFINE_FUNC_ALIGNED4(result, linkage, name, t1, t2, t3, t4) \   289     DEFINE_FUNC_PART1(result, linkage, name, (t1 p1, t2 p2, t3 p3, t4 p4)) \   290     DEFINE_FUNC_PART2(ALS(p1)+ALS(p2)+ALS(p3)+ALS(p4)) \   291     DEFINE_FUNC_PART3(name,(p1, p2, p3, p4))   293 #define DEFINE_FUNC_ALIGNED5(result, linkage, name, t1, t2, t3, t4, t5) \   294     DEFINE_FUNC_PART1(result, linkage, name, (t1 p1, t2 p2, t3 p3, t4 p4, t5 p5)) \   295     DEFINE_FUNC_PART2(ALS(p1)+ALS(p2)+ALS(p3)+ALS(p4)+ALS(p5)) \   296     DEFINE_FUNC_PART3(name,(p1, p2, p3, p4, p5))   298 #define DEFINE_FUNC_ALIGNED6(result, linkage, name, t1, t2, t3, t4, t5, t6) \   299     DEFINE_FUNC_PART1(result, linkage, name, (t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6)) \   300     DEFINE_FUNC_PART2(ALS(p1)+ALS(p2)+ALS(p3)+ALS(p4)+ALS(p5)+ALS(p6)) \   301     DEFINE_FUNC_PART3(name,(p1, p2, p3, p4, p5, p6))   303 #define DEFINE_FUNC_ALIGNED7(result, linkage, name, t1, t2, t3, t4, t5, t6, t7) \   304     DEFINE_FUNC_PART1(result, linkage, name, (t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7)) \   305     DEFINE_FUNC_PART2(ALS(p1)+ALS(p2)+ALS(p3)+ALS(p4)+ALS(p5)+ALS(p6)+ALS(p7)) \   306     DEFINE_FUNC_PART3(name,(p1, p2, p3, p4, p5, p6, p7))   308 #define DEFINE_FUNC_ALIGNED8(result, linkage, name, t1, t2, t3, t4, t5, t6, t7, t8) \   309     DEFINE_FUNC_PART1(result, linkage, name, (t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8)) \   310     DEFINE_FUNC_PART2(ALS(p1)+ALS(p2)+ALS(p3)+ALS(p4)+ALS(p5)+ALS(p6)+ALS(p7)+ALS(p8)) \   311     DEFINE_FUNC_PART3(name,(p1, p2, p3, p4, p5, p6, p7, p8))   313 #define DEFINE_FUNC_ALIGNED9(result, linkage, name, t1, t2, t3, t4, t5, t6, t7, t8, t9) \   314     DEFINE_FUNC_PART1(result, linkage, name, (t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, t9 p9)) \   315     DEFINE_FUNC_PART2(ALS(p1)+ALS(p2)+ALS(p3)+ALS(p4)+ALS(p5)+ALS(p6)+ALS(p7)+ALS(p8)+ALS(p9)) \   316     DEFINE_FUNC_PART3(name,(p1, p2, p3, p4, p5, p6, p7, p8, p9))   320 #define DEFINE_FUNC_ALIGNED0(result, linkage, name)                                            DEFINE_METHOD_LINKAGE0 (result, linkage, name)   321 #define DEFINE_FUNC_ALIGNED1(result, linkage, name, t1)                                        DEFINE_METHOD_LINKAGE1 (result, linkage, name, (t1 p1) )   322 #define DEFINE_FUNC_ALIGNED2(result, linkage, name, t1, t2)                                    DEFINE_METHOD_LINKAGE2 (result, linkage, name, (t1 p1, t2 p2) )   323 #define DEFINE_FUNC_ALIGNED3(result, linkage, name, t1, t2, t3)                                DEFINE_METHOD_LINKAGE3 (result, linkage, name, (t1 p1, t2 p2, t3 p3) )   324 #define DEFINE_FUNC_ALIGNED4(result, linkage, name, t1, t2, t3, t4)                            DEFINE_METHOD_LINKAGE4 (result, linkage, name, (t1 p1, t2 p2, t3 p3, t4 p4) )   325 #define DEFINE_FUNC_ALIGNED5(result, linkage, name, t1, t2, t3, t4, t5)                        DEFINE_METHOD_LINKAGE5 (result, linkage, name, (t1 p1, t2 p2, t3 p3, t4 p4, t5 p5) )   326 #define DEFINE_FUNC_ALIGNED6(result, linkage, name, t1, t2, t3, t4, t5, t6)                    DEFINE_METHOD_LINKAGE6 (result, linkage, name, (t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6) )   327 #define DEFINE_FUNC_ALIGNED7(result, linkage, name, t1, t2, t3, t4, t5, t6, t7)                DEFINE_METHOD_LINKAGE7 (result, linkage, name, (t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7) )   328 #define DEFINE_FUNC_ALIGNED8(result, linkage, name, t1, t2, t3, t4, t5, t6, t7, t8)            DEFINE_METHOD_LINKAGE8 (result, linkage, name, (t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8) )   329 #define DEFINE_FUNC_ALIGNED9(result, linkage, name, t1, t2, t3, t4, t5, t6, t7, t8, t9)        DEFINE_METHOD_LINKAGE9 (result, linkage, name, (t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, t9 p9) )   330 #define DEFINE_FUNC_ALIGNED10(result, linkage, name, t1, t2, t3, t4, t5, t6, t7, t8, t10)      DEFINE_METHOD_LINKAGE10(result, linkage, name, (t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, t9 p9, t10 p10) )   331 #define DEFINE_FUNC_ALIGNED11(result, linkage, name, t1, t2, t3, t4, t5, t6, t7, t8, t10, t11) DEFINE_METHOD_LINKAGE11(result, linkage, name, (t1 p1, t2 p2, t3 p3, t4 p4, t5 p5, t6 p6, t7 p7, t8 p8, t9 p9, t10 p10, t11 p11) )   345 #define BEGIN_METHOD_RESOLVE() \   347   virtual bool ResolveExports() override \   350 #define END_METHOD_RESOLVE() \   363 #define RESOLVE_METHOD(method) \   364   if (!m_dll->ResolveExport( #method , & m_##method##_ptr )) \   367 #define RESOLVE_METHOD_FP(method) \   368   if (!m_dll->ResolveExport( #method , & m_##method##_ptr )) \   383 #define RESOLVE_METHOD_OPTIONAL(method) \   384    m_##method##_ptr = nullptr; \   385    m_dll->ResolveExport( #method , & m_##method##_ptr, false );   387 #define RESOLVE_METHOD_OPTIONAL_FP(method) \   388    m_##method##_ptr = NULL; \   389    m_dll->ResolveExport( #method , & m_##method##_ptr, false );   403 #define RESOLVE_METHOD_RENAME(dllmethod, method) \   404   if (!m_dll->ResolveExport( #dllmethod , & m_##method##_ptr )) \   407 #define RESOLVE_METHOD_RENAME_OPTIONAL(dllmethod, method) \   408   m_##method##_ptr = nullptr; \   409   m_dll->ResolveExport( #dllmethod , & m_##method##_ptr, false );   411 #define RESOLVE_METHOD_RENAME_FP(dllmethod, method) \   412   if (!m_dll->ResolveExport( #dllmethod , & method##_ptr )) \   518   explicit DllDynamic(
const std::string& strDllName);
   521   virtual void Unload();
   522   virtual bool IsLoaded()
 const { 
return m_dll!=NULL; }
   524   bool EnableDelayedUnload(
bool bOnOff);
   525   bool SetFile(
const std::string& strDllName);
   526   const std::string &GetFile()
 const { 
return m_strDllName; }
   529   virtual bool ResolveExports()=0;
   530   virtual bool LoadSymbols() { 
return false; }
   533   std::string m_strDllName;
 Definition: LibraryLoader.h:17
Definition: DynamicDll.h:514