00001
00002
00003
00004 #ifndef DLLLOADER_ReportError
00005 #define DLLLOADER_ReportError
00006 static void ReportError(const char* pname){
00007 DSTR << "Fail to find '" << pname << "'" << std::endl;
00008 }
00009 #endif
00010
00011 #ifndef DLLFUNC_CTYPE
00012 # define DLLFUNC_CTYPE
00013 #endif
00014
00015 #ifdef DLLFUNC_RTYPE
00016 DLLFUNC_RTYPE DLLFUNC_CTYPE DLLFUNC_NAME DLLFUNC_ARGDEF{
00017 typedef DLLFUNC_RTYPE DLLFUNC_CTYPE functype DLLFUNC_ARGDEF;
00018 static functype* func=NULL;
00019 static bool bFirst = true;
00020 if (!func){
00021 func = (functype*)dllLoader.GetProc(DLLFUNC_STR);
00022 if (!func){
00023 if (bFirst) ReportError(DLLFUNC_STR);
00024 bFirst = false;
00025 return DLLFUNC_RTYPE();
00026 }
00027 }
00028 return func DLLFUNC_ARGCALL;
00029 }
00030 #undef DLLFUNC_RTYPE
00031 #else
00032 void DLLFUNC_CTYPE DLLFUNC_NAME DLLFUNC_ARGDEF{
00033 typedef void DLLFUNC_CTYPE functype DLLFUNC_ARGDEF;
00034 static functype* func=NULL;
00035 if (!func){
00036 func = (functype*)dllLoader.GetProc(DLLFUNC_STR);
00037 if (!func){
00038 ReportError(DLLFUNC_STR);
00039 return;
00040 }
00041 }
00042 func DLLFUNC_ARGCALL;
00043 }
00044 #endif
00045
00046 #undef DLLFUNC_NAME
00047 #undef DLLFUNC_STR
00048 #undef DLLFUNC_ARGDEF
00049 #undef DLLFUNC_ARGCALL
00050 #undef DLLFUNC_CTYPE