1185 lines
52 KiB
C
1185 lines
52 KiB
C
#pragma once
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// Externs binding must use these macro
|
|
|
|
// This macro is duplicated in VSL projet,
|
|
// because we don't want to provide VSL src in the SDK
|
|
#define NODEFAULT nodefault
|
|
|
|
#define STARTVSLBIND(context) using namespace VSL; \
|
|
VSLManager *VSLM = (VSLManager *)context->GetManagerByGuid(VSLMANAGER_GUID); \
|
|
if (VSLM) { VSLM->RegisterSpace();
|
|
#define STOPVSLBIND }
|
|
#define REGISTERVSLGUID(iGUID, iClassName) VSLM->RegisterGUID(iGUID, iClassName);
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// Type Declaration
|
|
// TODO : 3 param = alias type::RawName()
|
|
|
|
// Special class option for CKObjects
|
|
#ifndef VCLASSOPTION_USERDATA
|
|
#define VCLASSOPTION_USERDATA(x) ((x << 24) & 0xFF000000)
|
|
#endif
|
|
#define VCLASSOPTION_CKOBJECT VCLASSOPTION_USERDATA(1)
|
|
#define VCLASSOPTION_PINBYPOINTER VCLASSOPTION_USERDATA(2)
|
|
|
|
#define DECLARETYPE(type) VSLM->RegisterClass(#type, sizeof(type));
|
|
#define DECLARETYPEALIAS(type,alias) VSLM->RegisterClass(#type, sizeof(type), alias);
|
|
#define DECLARETYPEWITHREF(type,ref) VSLM->RegisterClass(#type, ref);
|
|
#define DECLARETYPEALIASWITHREF(type,ref,alias) VSLM->RegisterClass(#type, ref, alias);
|
|
|
|
#if defined(_DEBUG) && !defined(VIRTOOLS_USER_SDK)
|
|
#define DECLAREDOCSDKLINK(type,link) VSLM->RegisterClassDocSDKLink(#type, link);
|
|
#else
|
|
#define DECLAREDOCSDKLINK(type,link)
|
|
#endif
|
|
|
|
#define DECLAREPOINTERTYPE(type) VSLM->RegisterClass(#type, sizeof(type), NULL, VCLASSOPTION_POINTERCOPY);
|
|
#define DECLAREPOINTERTYPEALIAS(type,alias) VSLM->RegisterClass(#type, sizeof(type), alias, VCLASSOPTION_POINTERCOPY);
|
|
#define DECLARECKOBJECTTYPEALIAS(type,alias) VSLM->RegisterClass(#type, sizeof(type), alias, VCLASSOPTION_POINTERCOPY|VCLASSOPTION_CKOBJECT);
|
|
|
|
#define DECLAREOBJECTTYPE(type) VSLM->RegisterClass(#type, sizeof(type), NULL, VCLASSOPTION_MEMCOPY);
|
|
#define DECLAREOBJECTTYPEALIAS(type,alias) VSLM->RegisterClass(#type, sizeof(type), alias, VCLASSOPTION_MEMCOPY);
|
|
#define DECLAREOBJECTTYPEALIAS_PINBYPOINTER(type,alias) VSLM->RegisterClass(#type, sizeof(type), alias, VCLASSOPTION_MEMCOPY|VCLASSOPTION_PINBYPOINTER);
|
|
|
|
#define DECLAREINHERITANCESIMPLE(a,b) VSLM->RegisterHeritage(a,b,0);
|
|
#define DECLAREINHERITANCEDOUBLE(a,b,c) VSLM->RegisterHeritage(a,b,c,0);
|
|
|
|
#define REGISTERCONST(name,type,data) VSLM->RegisterConstant(name,type,data);
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
// Enum
|
|
|
|
#define DECLAREENUM(enumName) VSLM->RegisterEnum(enumName);
|
|
#define DECLAREENUMVALUE(enumName,valueName,value) VSLM->RegisterEnumMember(enumName,valueName,value);
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
// Enum
|
|
|
|
enum BindedConstType
|
|
{
|
|
BIND_BOOL,
|
|
BIND_CHAR,
|
|
BIND_INT,
|
|
BIND_FLOAT
|
|
};
|
|
|
|
#define DECLARECONST(constName,constType,value) VSLM->RegisterConstant(constName,constType,value);
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
// Member Declaration
|
|
|
|
#if defined(macintosh) || defined(PSX2) || defined(PSP) || (_XBOX_VER>=200)
|
|
|
|
#define DECLAREMEMBER(classe,mtype,member) { \
|
|
classe* instance = NULL; \
|
|
int offset = (int) &(instance->member); \
|
|
XASSERT((offset + sizeof(mtype)) <= sizeof(classe)); \
|
|
VSLM->RegisterMember(#classe,#member,#mtype, offset);\
|
|
}
|
|
|
|
#else
|
|
|
|
#define DECLAREMEMBER(classe,mtype,member) { \
|
|
typedef mtype (classe::*mptr); \
|
|
mptr var = (mptr)(&classe::member); \
|
|
void* ptr = (void*)*(DWORD*)&var; \
|
|
VSLM->RegisterMember(#classe,#member,#mtype,(int)ptr);\
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// function Declaration
|
|
|
|
#define DECLAREFUN_0(ret,func,callconv) {\
|
|
typedef ret (*fptr)(); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,0,#ret);\
|
|
}
|
|
#define DECLAREFUN_C_0(ret,func) DECLAREFUN_0(ret,func,VCALLTYPE_CDECL)
|
|
#define DECLAREFUN_S_0(ret,func) DECLAREFUN_0(ret,func,VCALLTYPE_STDCALL)
|
|
|
|
#define DECLAREFUN_1(ret,func,arg1,callconv) {\
|
|
typedef ret (*fptr)(arg1); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,1,#ret,#arg1);\
|
|
}
|
|
|
|
#define DECLAREFUN_1_WITH_DEF_VALS(ret,func,arg1,defVal1,callconv) {\
|
|
typedef ret (*fptr)(arg1); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,1,#ret,#arg1" = "#defVal1);\
|
|
}
|
|
|
|
#define DECLAREFUN_C_1(ret,func,arg1) DECLAREFUN_1(ret,func,arg1,VCALLTYPE_CDECL)
|
|
#define DECLAREFUN_S_1(ret,func,arg1) DECLAREFUN_1(ret,func,arg1,VCALLTYPE_STDCALL)
|
|
#define DECLAREFUN_C_1_WITH_DEF_VALS(ret,func,arg1,defVal1) DECLAREFUN_1_WITH_DEF_VALS(ret,func,arg1,defVal1,VCALLTYPE_CDECL)
|
|
#define DECLAREFUN_S_1_WITH_DEF_VALS(ret,func,arg1,defVal1) DECLAREFUN_1_WITH_DEF_VALS(ret,func,arg1,defVal1,VCALLTYPE_STDCALL)
|
|
|
|
#define DECLAREFUN_2(ret,func,arg1,arg2,callconv) { \
|
|
typedef ret (*fptr)(arg1,arg2); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,2,#ret,#arg1,#arg2); \
|
|
}
|
|
|
|
#define DECLAREFUN_2_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,callconv) { \
|
|
typedef ret (*fptr)(arg1,arg2); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,2,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2); \
|
|
}
|
|
|
|
#define DECLAREFUN_C_2(ret,func,arg1,arg2) DECLAREFUN_2(ret,func,arg1,arg2,VCALLTYPE_CDECL)
|
|
#define DECLAREFUN_S_2(ret,func,arg1,arg2) DECLAREFUN_2(ret,func,arg1,arg2,VCALLTYPE_STDCALL)
|
|
#define DECLAREFUN_C_2_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2) DECLAREFUN_2_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,VCALLTYPE_CDECL)
|
|
#define DECLAREFUN_S_2_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2) DECLAREFUN_2_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,VCALLTYPE_STDCALL)
|
|
|
|
#define DECLAREFUN_3(ret,func,arg1,arg2,arg3,callconv) {\
|
|
typedef ret (*fptr)(arg1,arg2,arg3); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,3,#ret,#arg1,#arg2,#arg3);\
|
|
}
|
|
|
|
#define DECLAREFUN_3_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,callconv) {\
|
|
typedef ret (*fptr)(arg1,arg2,arg3); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,3,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3);\
|
|
}
|
|
|
|
#define DECLAREFUN_C_3(ret,func,arg1,arg2,arg3) DECLAREFUN_3(ret,func,arg1,arg2,arg3,VCALLTYPE_CDECL)
|
|
#define DECLAREFUN_S_3(ret,func,arg1,arg2,arg3) DECLAREFUN_3(ret,func,arg1,arg2,arg3,VCALLTYPE_STDCALL)
|
|
#define DECLAREFUN_C_3_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3) DECLAREFUN_3_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,VCALLTYPE_CDECL)
|
|
#define DECLAREFUN_S_3_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3) DECLAREFUN_3_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,VCALLTYPE_STDCALL)
|
|
|
|
#define DECLAREFUN_4(ret,func,arg1,arg2,arg3,arg4,callconv) {\
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,4,#ret,#arg1,#arg2,#arg3,#arg4);\
|
|
}
|
|
|
|
#define DECLAREFUN_4_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,callconv) {\
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,4,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4);\
|
|
}
|
|
|
|
#define DECLAREFUN_C_4(ret,func,arg1,arg2,arg3,arg4) DECLAREFUN_4(ret,func,arg1,arg2,arg3,arg4,VCALLTYPE_CDECL)
|
|
#define DECLAREFUN_S_4(ret,func,arg1,arg2,arg3,arg4) DECLAREFUN_4(ret,func,arg1,arg2,arg3,arg4,VCALLTYPE_STDCALL)
|
|
#define DECLAREFUN_C_4_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4) DECLAREFUN_4_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,VCALLTYPE_CDECL)
|
|
#define DECLAREFUN_S_4_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4) DECLAREFUN_4_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,VCALLTYPE_STDCALL)
|
|
|
|
#define DECLAREFUN_5(ret,func,arg1,arg2,arg3,arg4,arg5,callconv) {\
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4,arg5); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,5,#ret,#arg1,#arg2,#arg3,#arg4,#arg5);\
|
|
}
|
|
|
|
#define DECLAREFUN_5_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,callconv) {\
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4,arg5); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,5,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5);\
|
|
}
|
|
|
|
#define DECLAREFUN_C_5(ret,func,arg1,arg2,arg3,arg4,arg5) DECLAREFUN_5(ret,func,arg1,arg2,arg3,arg4,arg5,VCALLTYPE_CDECL)
|
|
#define DECLAREFUN_S_5(ret,func,arg1,arg2,arg3,arg4,arg5) DECLAREFUN_5(ret,func,arg1,arg2,arg3,arg4,arg5,VCALLTYPE_STDCALL)
|
|
#define DECLAREFUN_C_5_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5) DECLAREFUN_5_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,VCALLTYPE_CDECL)
|
|
#define DECLAREFUN_S_5_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5) DECLAREFUN_5_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,VCALLTYPE_STDCALL)
|
|
|
|
#define DECLAREFUN_6(ret,func,arg1,arg2,arg3,arg4,arg5,arg6,callconv) {\
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4,arg5,arg6); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,6,#ret,#arg1,#arg2,#arg3,#arg4,#arg5,#arg6);\
|
|
}
|
|
|
|
#define DECLAREFUN_6_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,callconv) {\
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4,arg5,arg6); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,6,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5,#arg6" = "#defVal6);\
|
|
}
|
|
|
|
#define DECLAREFUN_C_6(ret,func,arg1,arg2,arg3,arg4,arg5,arg6) DECLAREFUN_6(ret,func,arg1,arg2,arg3,arg4,arg5,arg6,VCALLTYPE_CDECL)
|
|
#define DECLAREFUN_S_6(ret,func,arg1,arg2,arg3,arg4,arg5,arg6) DECLAREFUN_6(ret,func,arg1,arg2,arg3,arg4,arg5,arg6,VCALLTYPE_STDCALL)
|
|
#define DECLAREFUN_C_6_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6) DECLAREFUN_6_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,VCALLTYPE_CDECL)
|
|
#define DECLAREFUN_S_6_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6) DECLAREFUN_6_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,VCALLTYPE_STDCALL)
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
// Function Declaration with a different name
|
|
|
|
#define DECLAREFUNALIAS_0(name,ret,func,callconv) {\
|
|
typedef ret (*fptr)(); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(name,ptr,callconv,0,#ret); \
|
|
}
|
|
|
|
#define DECLAREFUNALIAS_C_0(name,ret,func) DECLAREFUNALIAS_0(name,ret,func,(VSL::VCallType)(VCALLTYPE_CDECL|VCALLTYPE_ALIAS))
|
|
#define DECLAREFUNALIAS_S_0(name,ret,func) DECLAREFUNALIAS_0(name,ret,func,(VSL::VCallType)(VCALLTYPE_STDCALL|VCALLTYPE_ALIAS))
|
|
|
|
#define DECLAREFUNALIAS_1(name,ret,func,arg1,callconv) {\
|
|
typedef ret (*fptr)(arg1); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(name,ptr,callconv,1,#ret,#arg1);\
|
|
}
|
|
#define DECLAREFUNALIAS_C_1(name,ret,func,arg1) DECLAREFUNALIAS_1(name,ret,func,arg1,(VSL::VCallType)(VCALLTYPE_CDECL|VCALLTYPE_ALIAS))
|
|
#define DECLAREFUNALIAS_S_1(name,ret,func,arg1) DECLAREFUNALIAS_1(name,ret,func,arg1,(VSL::VCallType)(VCALLTYPE_STDCALL|VCALLTYPE_ALIAS))
|
|
|
|
#define DECLAREFUNALIAS_2(name,ret,func,arg1,arg2,callconv) {\
|
|
typedef ret (*fptr)(arg1,arg2); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(name,ptr,callconv,2,#ret,#arg1,#arg2);\
|
|
}
|
|
#define DECLAREFUNALIAS_C_2(name,ret,func,arg1,arg2) DECLAREFUNALIAS_2(name,ret,func,arg1,arg2,(VSL::VCallType)(VCALLTYPE_CDECL|VCALLTYPE_ALIAS))
|
|
#define DECLAREFUNALIAS_S_2(name,ret,func,arg1,arg2) DECLAREFUNALIAS_2(name,ret,func,arg1,arg2,(VSL::VCallType)(VCALLTYPE_STDCALL|VCALLTYPE_ALIAS))
|
|
|
|
#define DECLAREFUNALIAS_3(name,ret,func,arg1,arg2,arg3,callconv) {\
|
|
typedef ret (*fptr)(arg1,arg2,arg3); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(name,ptr,callconv,3,#ret,#arg1,#arg2,#arg3);\
|
|
}
|
|
#define DECLAREFUNALIAS_C_3(name,ret,func,arg1,arg2,arg3) DECLAREFUNALIAS_3(name,ret,func,arg1,arg2,arg3,(VSL::VCallType)(VCALLTYPE_CDECL|VCALLTYPE_ALIAS))
|
|
#define DECLAREFUNALIAS_S_3(name,ret,func,arg1,arg2,arg3) DECLAREFUNALIAS_3(name,ret,func,arg1,arg2,arg3,(VSL::VCallType)(VCALLTYPE_STDCALL|VCALLTYPE_ALIAS))
|
|
|
|
#define DECLAREFUNALIAS_4(name,ret,func,arg1,arg2,arg3,arg4,callconv) {\
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(name,ptr,callconv,4,#ret,#arg1,#arg2,#arg3,#arg4);\
|
|
}
|
|
#define DECLAREFUNALIAS_C_4(name,ret,func,arg1,arg2,arg3,arg4) DECLAREFUNALIAS_4(name,ret,func,arg1,arg2,arg3,arg4,(VSL::VCallType)(VCALLTYPE_CDECL|VCALLTYPE_ALIAS))
|
|
#define DECLAREFUNALIAS_S_4(name,ret,func,arg1,arg2,arg3,arg4) DECLAREFUNALIAS_4(name,ret,func,arg1,arg2,arg3,arg4,(VSL::VCallType)(VCALLTYPE_STDCALL|VCALLTYPE_ALIAS))
|
|
|
|
#define DECLAREFUNALIAS_5(name,ret,func,arg1,arg2,arg3,arg4,arg5,callconv) {\
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4,arg5); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(name,(fptr)ptr,callconv,4,#ret,#arg1,#arg2,#arg3,#arg4,arg5);\
|
|
}
|
|
#define DECLAREFUNALIAS_C_5(name,ret,func,arg1,arg2,arg3,arg4,arg5) DECLAREFUNALIAS_5(name,ret,func,arg1,arg2,arg3,arg4,arg5,(VSL::VCallType)(VCALLTYPE_CDECL|VCALLTYPE_ALIAS))
|
|
#define DECLAREFUNALIAS_S_5(name,ret,func,arg1,arg2,arg3,arg4,arg5) DECLAREFUNALIAS_5(name,ret,func,arg1,arg2,arg3,arg4,arg5,(VSL::VCallType)(VCALLTYPE_STDCALL|VCALLTYPE_ALIAS))
|
|
|
|
#define DECLAREFUNALIAS_6(name,ret,func,arg1,arg2,arg3,arg4,arg5,arg6,callconv) {\
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4,arg5,arg6); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(name,ptr,callconv,4,#ret,#arg1,#arg2,#arg3,#arg4,arg5,arg6);\
|
|
}
|
|
#define DECLAREFUNALIAS_C_6(name,ret,func,arg1,arg2,arg3,arg4,arg5,arg6) DECLAREFUNALIAS_6(name,ret,func,arg1,arg2,arg3,arg4,arg5,arg6,(VSL::VCallType)(VCALLTYPE_CDECL|VCALLTYPE_ALIAS))
|
|
#define DECLAREFUNALIAS_S_6(name,ret,func,arg1,arg2,arg3,arg4,arg5,arg6) DECLAREFUNALIAS_6(name,ret,func,arg1,arg2,arg3,arg4,arg5,arg6,(VSL::VCallType)(VCALLTYPE_STDCALL|VCALLTYPE_ALIAS))
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
// constructor Declaration
|
|
|
|
#define DECLARENEW_0(ret,func,callconv) {\
|
|
typedef ret (*fptr)(BYTE*); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,0,#ret);\
|
|
}
|
|
#define DECLARECTOR_0(func) DECLARENEW_0(void,func,VCALLTYPE_CDECL)
|
|
|
|
#define DECLARENEW_1(ret,func,arg1,callconv) {\
|
|
typedef ret (*fptr)(BYTE*,arg1); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,1,#ret,#arg1);\
|
|
}
|
|
#define DECLARECTOR_1(func,arg1) DECLARENEW_1(void,func,arg1,VCALLTYPE_CDECL)
|
|
|
|
#define DECLARENEW_2(ret,func,arg1,arg2,callconv) {\
|
|
typedef ret (*fptr)(BYTE*,arg1,arg2); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,2,#ret,#arg1,#arg2);\
|
|
}
|
|
#define DECLARECTOR_2(func,arg1,arg2) DECLARENEW_2(void,func,arg1,arg2,VCALLTYPE_CDECL)
|
|
|
|
#define DECLARENEW_3(ret,func,arg1,arg2,arg3,callconv) {\
|
|
typedef ret (*fptr)(BYTE*,arg1,arg2,arg3); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,3,#ret,#arg1,#arg2,#arg3);\
|
|
}
|
|
|
|
|
|
#define DECLARECTOR_3(func,arg1,arg2,arg3) DECLARENEW_3(void,func,arg1,arg2,arg3,VCALLTYPE_CDECL)
|
|
|
|
#define DECLARENEW_4(ret,func,arg1,arg2,arg3,arg4,callconv) {\
|
|
typedef ret (*fptr)(BYTE*,arg1,arg2,arg3,arg4); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,4,#ret,#arg1,#arg2,#arg3,#arg4);\
|
|
}
|
|
#define DECLARECTOR_4(func,arg1,arg2,arg3,arg4) DECLARENEW_4(void,func,arg1,arg2,arg3,arg4,VCALLTYPE_CDECL)
|
|
|
|
#define DECLARENEW_5(ret,func,arg1,arg2,arg3,arg4,arg5,callconv) {\
|
|
typedef ret (*fptr)(BYTE*,arg1,arg2,arg3,arg4,arg5); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,4,#ret,#arg1,#arg2,#arg3,#arg4,arg5);\
|
|
}
|
|
#define DECLARECTOR_5(func,arg1,arg2,arg3,arg4,arg5) DECLARENEW_5(void,func,arg1,arg2,arg3,arg4,arg5,VCALLTYPE_CDECL)
|
|
|
|
#define DECLARENEW_6(ret,func,arg1,arg2,arg3,arg4,arg5,arg6,callconv) {\
|
|
typedef ret (*fptr)(BYTE*,arg1,arg2,arg3,arg4,arg5,arg6); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,4,#ret,#arg1,#arg2,#arg3,#arg4,arg5,arg6);\
|
|
}
|
|
#define DECLARECTOR_6(func,arg1,arg2,arg3,arg4,arg5,arg6) DECLARENEW_6(void,func,arg1,arg2,arg3,arg4,arg5,arg6,VCALLTYPE_CDECL)
|
|
|
|
#define DECLARENEW_7(ret,func,arg1,arg2,arg3,arg4,arg5,arg6,arg7,callconv) {\
|
|
typedef ret (*fptr)(BYTE*,arg1,arg2,arg3,arg4,arg5,arg6,arg7); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,4,#ret,#arg1,#arg2,#arg3,#arg4,arg5,arg6,arg7);\
|
|
}
|
|
#define DECLARECTOR_7(func,arg1,arg2,arg3,arg4,arg5,arg6,arg7) DECLARENEW_7(void,func,arg1,arg2,arg3,arg4,arg5,arg6,arg7,VCALLTYPE_CDECL)
|
|
|
|
#define DECLARENEW_8(ret,func,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,callconv) {\
|
|
typedef ret (*fptr)(BYTE*,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,8,#ret,#arg1,#arg2,#arg3,#arg4,#arg5,#arg6,#arg7,#arg8);\
|
|
}
|
|
#define DECLARECTOR_8(func,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) DECLARENEW_8(void,func,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,VCALLTYPE_CDECL)
|
|
|
|
// With Def Values
|
|
|
|
#define DECLARENEW_1_WITH_DEF_VALS(ret,func,arg1,defVal1,callconv) {\
|
|
typedef ret (*fptr)(BYTE*,arg1); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,1,#ret,#arg1" = "#defVal1);\
|
|
}
|
|
#define DECLARECTOR_1_WITH_DEF_VALS(func,arg1) DECLARENEW_1_WITH_DEF_VALS(void,func,arg1,defVal1,VCALLTYPE_CDECL)
|
|
|
|
#define DECLARENEW_2_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,callconv) {\
|
|
typedef ret (*fptr)(BYTE*,arg1,arg2); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,2,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2);\
|
|
}
|
|
#define DECLARECTOR_2_WITH_DEF_VALS(func,arg1,defVal1,arg2,defVal2) DECLARENEW_2_WITH_DEF_VALS(void,func,arg1,defVal1,arg2,defVal2,VCALLTYPE_CDECL)
|
|
|
|
#define DECLARENEW_3_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,callconv) {\
|
|
typedef ret (*fptr)(BYTE*,arg1,arg2,arg3); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,3,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3);\
|
|
}
|
|
#define DECLARECTOR_3_WITH_DEF_VALS(func,arg1,defVal1,arg2,defVal2,arg3,defVal3) DECLARENEW_3_WITH_DEF_VALS(void,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,VCALLTYPE_CDECL)
|
|
|
|
#define DECLARENEW_4_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,callconv) {\
|
|
typedef ret (*fptr)(BYTE*,arg1,arg2,arg3,arg4); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,4,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4);\
|
|
}
|
|
#define DECLARECTOR_4_WITH_DEF_VALS(func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4) DECLARENEW_4_WITH_DEF_VALS(void,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,VCALLTYPE_CDECL)
|
|
|
|
#define DECLARENEW_5_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,callconv) {\
|
|
typedef ret (*fptr)(BYTE*,arg1,arg2,arg3,arg4,arg5); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,5,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5);\
|
|
}
|
|
#define DECLARECTOR_5_WITH_DEF_VALS(func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5) DECLARENEW_5_WITH_DEF_VALS(void,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,VCALLTYPE_CDECL)
|
|
|
|
#define DECLARENEW_6_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,callconv) {\
|
|
typedef ret (*fptr)(BYTE*,arg1,arg2,arg3,arg4,arg5,arg6); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,6,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5,#arg6" = "#defVal6);\
|
|
}
|
|
#define DECLARECTOR_6_WITH_DEF_VALS(func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6) DECLARENEW_6_WITH_DEF_VALS(void,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,VCALLTYPE_CDECL)
|
|
|
|
#define DECLARENEW_7_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,arg7,defVal7,callconv) {\
|
|
typedef ret (*fptr)(BYTE*,arg1,arg2,arg3,arg4,arg5,arg6,arg7); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,7,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5,#arg6" = "#defVal6,#arg7" = "#defVal7);\
|
|
}
|
|
#define DECLARECTOR_7_WITH_DEF_VALS(func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,arg7,defVal7) DECLARENEW_7_WITH_DEF_VALS(void,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,arg7,defVal7,VCALLTYPE_CDECL)
|
|
|
|
#define DECLARENEW_8_WITH_DEF_VALS(ret,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,arg7,defVal7,arg8,defVal8,callconv) {\
|
|
typedef ret (*fptr)(BYTE*,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,callconv,8,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5,#arg6" = "#defVal6,#arg7" = "#defVal7,#arg8" = "#defVal8);\
|
|
}
|
|
#define DECLARECTOR_8_WITH_DEF_VALS(func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,arg7,defVal7,arg8,defVal8) DECLARENEW_8_WITH_DEF_VALS(void,func,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,arg7,defVal7,arg8,defVal8,VCALLTYPE_CDECL)
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
// destructor Declaration
|
|
|
|
|
|
#ifdef __GNUC__
|
|
#define DECLAREDESTRUCTORFUNCTION(classe) void __dest##classe(classe *obj){obj->~classe();}
|
|
#define DECLAREDESTRUCTORFUNCTIONALIAS(classe, alias) void __dest##alias(classe *obj){obj->~classe();}
|
|
#else
|
|
#define DECLAREDESTRUCTORFUNCTION(classe) void __dest##classe(classe *obj){obj->~##classe();}
|
|
#define DECLAREDESTRUCTORFUNCTIONALIAS(classe, alias) void __dest##alias(classe *obj){obj->~##classe();}
|
|
#endif
|
|
|
|
#define DECLAREDESTRUCTOR(func) {\
|
|
typedef void (*fptr)(BYTE*); \
|
|
fptr rawPtr = (fptr) func; \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &rawPtr); \
|
|
VSLM->RegisterFunction(#func,ptr,VCALLTYPE_CDECL,0,"void");\
|
|
}
|
|
///////////////////////////////////////////////////////////////////
|
|
// class method Declaration
|
|
|
|
#define FPTR(a) (fptr) a
|
|
|
|
#define DECLAREMETHOD_0(classe,ret,method) { \
|
|
typedef ret (classe::*fptr)(); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,0,#ret);\
|
|
}
|
|
|
|
#define DECLAREMETHODC_0(classe,ret,method) { \
|
|
typedef ret (classe::*fptr)() const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,0,#ret);\
|
|
}
|
|
|
|
#define DECLAREMETHOD_1(classe,ret,method,arg1) { \
|
|
typedef ret (classe::*fptr)(arg1); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,1,#ret,#arg1);\
|
|
}
|
|
|
|
#define DECLAREMETHOD_1_WITH_DEF_VALS(classe,ret,method,arg1,defVal1) { \
|
|
typedef ret (classe::*fptr)(arg1); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,1,#ret,#arg1" = "#defVal1);\
|
|
}
|
|
|
|
#define DECLAREMETHODC_1(classe,ret,method,arg1) { \
|
|
typedef ret (classe::*fptr)(arg1) const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,1,#ret,#arg1);\
|
|
}
|
|
|
|
#define DECLAREMETHODC_1_WITH_DEF_VALS(classe,ret,method,arg1,defVal1) { \
|
|
typedef ret (classe::*fptr)(arg1) const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,1,#ret,#arg1" = "#defVal1);\
|
|
}
|
|
|
|
#define DECLAREMETHOD_2(classe,ret,method,arg1,arg2) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,2,#ret,#arg1,#arg2);\
|
|
}
|
|
|
|
#define DECLAREMETHOD_2_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2); \
|
|
fptr var = FPTR(fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,2,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2);\
|
|
}
|
|
|
|
|
|
#define DECLAREMETHODC_2(classe,ret,method,arg1,arg2) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2) const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,2,#ret,#arg1,#arg2);\
|
|
}
|
|
|
|
#define DECLAREMETHODC_2_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2) const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,2,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2);\
|
|
}
|
|
|
|
#define DECLAREMETHOD_3(classe,ret,method,arg1,arg2,arg3) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,3,#ret,#arg1,#arg2,#arg3);\
|
|
}
|
|
|
|
#define DECLAREMETHOD_3_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,3,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3);\
|
|
}
|
|
|
|
#define DECLAREMETHODC_3(classe,ret,method,arg1,arg2,arg3) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3) const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,3,#ret,#arg1,#arg2,#arg3);\
|
|
}
|
|
|
|
#define DECLAREMETHODC_3_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3) const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,3,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3);\
|
|
}
|
|
|
|
#define DECLAREMETHOD_4(classe,ret,method,arg1,arg2,arg3,arg4) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,4,#ret,#arg1,#arg2,#arg3,#arg4);\
|
|
}
|
|
|
|
#define DECLAREMETHODC_4(classe,ret,method,arg1,arg2,arg3,arg4) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4) const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,4,#ret,#arg1,#arg2,#arg3,#arg4);\
|
|
}
|
|
|
|
#define DECLAREMETHOD_4_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,4,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4);\
|
|
}
|
|
|
|
#define DECLAREMETHODC_4_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4) const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,4,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4);\
|
|
}
|
|
|
|
#define DECLAREMETHOD_5(classe,ret,method,arg1,arg2,arg3,arg4,arg5) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,5,#ret,#arg1,#arg2,#arg3,#arg4,#arg5);\
|
|
}
|
|
|
|
#define DECLAREMETHODC_5(classe,ret,method,arg1,arg2,arg3,arg4,arg5) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5) const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,5,#ret,#arg1,#arg2,#arg3,#arg4,#arg5);\
|
|
}
|
|
|
|
#define DECLAREMETHOD_5_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,5,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5);\
|
|
}
|
|
|
|
#define DECLAREMETHODC_5_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5) const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,5,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5);\
|
|
}
|
|
|
|
#define DECLAREMETHOD_6(classe,ret,method,arg1,arg2,arg3,arg4,arg5,arg6) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5,arg6); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,6,#ret,#arg1,#arg2,#arg3,#arg4,#arg5,#arg6);\
|
|
}
|
|
|
|
#define DECLAREMETHODC_6(classe,ret,method,arg1,arg2,arg3,arg4,arg5,arg6) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5,arg6) const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,6,#ret,#arg1,#arg2,#arg3,#arg4,#arg5,#arg6);\
|
|
}
|
|
|
|
#define DECLAREMETHOD_6_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5,arg6); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,6,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5,#arg6" = "#defVal6);\
|
|
}
|
|
|
|
#define DECLAREMETHODC_6_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5,arg6) const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,6,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5,#arg6" = "#defVal6);\
|
|
}
|
|
|
|
#define DECLAREMETHOD_7(classe,ret,method,arg1,arg2,arg3,arg4,arg5,arg6,arg7) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5,arg6,arg7); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,7,#ret,#arg1,#arg2,#arg3,#arg4,#arg5,#arg6,#arg7);\
|
|
}
|
|
|
|
#define DECLAREMETHODC_7(classe,ret,method,arg1,arg2,arg3,arg4,arg5,arg6,arg7) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5,arg6,arg7) const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,7,#ret,#arg1,#arg2,#arg3,#arg4,#arg5,#arg6,#arg7);\
|
|
}
|
|
|
|
|
|
#define DECLAREMETHOD_7_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,arg7,defVal7) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5,arg6,arg7); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,7,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5,#arg6" = "#defVal6,#arg7" = "#defVal7);\
|
|
}
|
|
|
|
#define DECLAREMETHODC_7_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,arg7,defVal7) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5,arg6,arg7) const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,7,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5,#arg6" = "#defVal6,#arg7" = "#defVal7);\
|
|
}
|
|
|
|
#define DECLAREMETHOD_8(classe,ret,method,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,8,#ret,#arg1,#arg2,#arg3,#arg4,#arg5,#arg6,#arg7,#arg8);\
|
|
}
|
|
|
|
#define DECLAREMETHODC_8(classe,ret,method,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,8,#ret,#arg1,#arg2,#arg3,#arg4,#arg5,#arg6,#arg7,#arg8);\
|
|
}
|
|
|
|
#define DECLAREMETHOD_8_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,arg7,defVal7,arg8,defVal8) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,FALSE,ptr,VCALLTYPE_STDCALL,8,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5,#arg6" = "#defVal6,#arg7" = "#defVal7,#arg8" = "#defVal8);\
|
|
}
|
|
|
|
#define DECLAREMETHODC_8_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,arg7,defVal7,arg8,defVal8) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) const; \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,TRUE,ptr,VCALLTYPE_STDCALL,8,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5,#arg6" = "#defVal6,#arg7" = "#defVal7,#arg8" = "#defVal8);\
|
|
}
|
|
|
|
#define DECLAREMETHOD_9_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,arg7,defVal7,arg8,defVal8,arg9,defVal9) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9); \
|
|
fptr var = FPTR(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,FALSE,ptr,VCALLTYPE_STDCALL,9,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5,#arg6" = "#defVal6,#arg7" = "#defVal7,#arg8" = "#defVal8,#arg9" = "#defVal9);\
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
// class operator Declaration
|
|
|
|
inline const char* extractOperator(const char* opname)
|
|
{
|
|
const char* s = opname+8;
|
|
while (*s == ' ') ++s;
|
|
return s;
|
|
}
|
|
|
|
#define DECLAREOP_0(classe,ret,op) { \
|
|
typedef ret (classe::*fptr)(); \
|
|
fptr var = (fptr)(&classe::op); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,extractOperator(#op),FALSE,FALSE,ptr,VCALLTYPE_STDCALL,0,#ret);\
|
|
}
|
|
|
|
#define DECLAREOP_1(classe,ret,op,arg1) { \
|
|
typedef ret (classe::*fptr)(arg1); \
|
|
fptr var = (fptr)(&classe::op); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,extractOperator(#op),FALSE,FALSE,ptr,VCALLTYPE_STDCALL,1,#ret,#arg1);\
|
|
}
|
|
|
|
#define DECLAREOP_2(classe,ret,op,arg1,arg2) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2); \
|
|
fptr var = (fptr)(&classe::op); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,extractOperator(#op),FALSE,FALSE,ptr,VCALLTYPE_STDCALL,2,#ret,#arg1,#arg2);\
|
|
}
|
|
|
|
// constant versions
|
|
|
|
#define DECLAREOPC_0(classe,ret,op) { \
|
|
typedef ret (classe::*fptr)() const; \
|
|
fptr var = (fptr)(&classe::op); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,extractOperator(#op),FALSE,TRUE,ptr,VCALLTYPE_STDCALL,0,#ret);\
|
|
}
|
|
|
|
#define DECLAREOPC_1(classe,ret,op,arg1) { \
|
|
typedef ret (classe::*fptr)(arg1) const; \
|
|
fptr var = (fptr)(&classe::op); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,extractOperator(#op),FALSE,TRUE,ptr,VCALLTYPE_STDCALL,1,#ret,#arg1);\
|
|
}
|
|
|
|
#define DECLAREOPC_2(classe,ret,op,arg1,arg2) { \
|
|
typedef ret (classe::*fptr)(arg1,arg2) const; \
|
|
fptr var = (fptr)(&classe::op); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateMethodPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,extractOperator(#op),FALSE,TRUE,ptr,VCALLTYPE_STDCALL,2,#ret,#arg1,#arg2);\
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
// friend method Declaration
|
|
|
|
#define DECLAREFRIEND_0(ret,method) { \
|
|
typedef ret (*fptr)(); \
|
|
fptr var = (fptr)(&method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterFunction(#method,ptr,VCALLTYPE_CDECL,0,#ret);\
|
|
}
|
|
|
|
#define DECLAREFRIEND_1(ret,method,arg1) { \
|
|
typedef ret (*fptr)(arg1); \
|
|
fptr var = (fptr)(&method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterFunction(#method,ptr,VCALLTYPE_CDECL,1,#ret,#arg1);\
|
|
}
|
|
|
|
#define DECLAREFRIEND_2(ret,method,arg1,arg2) { \
|
|
typedef ret (*fptr)(arg1,arg2); \
|
|
fptr var = (fptr)(&method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterFunction(#method,ptr,VCALLTYPE_CDECL,2,#ret,#arg1,#arg2);\
|
|
}
|
|
|
|
#define DECLAREFRIEND_3(ret,method,arg1,arg2,arg3) { \
|
|
typedef ret (*fptr)(arg1,arg2,arg3); \
|
|
fptr var = (fptr)(&method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterFunction(#method,ptr,VCALLTYPE_CDECL,3,#ret,#arg1,#arg2,#arg3);\
|
|
}
|
|
|
|
#define DECLAREFRIEND_4(ret,method,arg1,arg2,arg3,arg4) { \
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4); \
|
|
fptr var = (fptr)(&method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterFunction(#method,ptr,VCALLTYPE_CDECL,4,#ret,#arg1,#arg2,#arg3,#arg4);\
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
// friend operator
|
|
|
|
#define DECLAREFRIENDOP_0(ret,op) { \
|
|
typedef ret (*fptr)(); \
|
|
fptr var = (fptr)(&op); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterFunction(extractOperator(#op),ptr,VCALLTYPE_CDECL,0,#ret);\
|
|
}
|
|
|
|
#define DECLAREFRIENDOP_1(ret,op,arg1) { \
|
|
typedef ret (*fptr)(arg1); \
|
|
fptr var = (fptr)(&op); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterFunction(extractOperator(#op),ptr,VCALLTYPE_CDECL,1,#ret,#arg1);\
|
|
}
|
|
|
|
#define DECLAREFRIENDOP_2(ret,op,arg1,arg2) { \
|
|
typedef ret (*fptr)(arg1,arg2); \
|
|
fptr var = (fptr)(&op); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterFunction(extractOperator(#op),ptr,VCALLTYPE_CDECL,2,#ret,#arg1,#arg2);\
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
// static method Declaration
|
|
|
|
#define DECLARESTATIC_0(classe,ret,method) { \
|
|
typedef ret (*fptr)(); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,0,#ret);\
|
|
}
|
|
|
|
#define DECLARESTATIC_1(classe,ret,method,arg1) { \
|
|
typedef ret (*fptr)(arg1); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,1,#ret,#arg1);\
|
|
}
|
|
|
|
#define DECLARESTATIC_2(classe,ret,method,arg1,arg2) { \
|
|
typedef ret (*fptr)(arg1,arg2); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,2,#ret,#arg1,#arg2);\
|
|
}
|
|
|
|
#define DECLARESTATIC_3(classe,ret,method,arg1,arg2,arg3) { \
|
|
typedef ret (*fptr)(arg1,arg2,arg3); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,3,#ret,#arg1,#arg2,#arg3);\
|
|
}
|
|
|
|
#define DECLARESTATIC_4(classe,ret,method,arg1,arg2,arg3,arg4) { \
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,4,#ret,#arg1,#arg2,#arg3,#arg4);\
|
|
}
|
|
|
|
#define DECLARESTATIC_5(classe,ret,method,arg1,arg2,arg3,arg4,arg5) { \
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4,arg5); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,5,#ret,#arg1,#arg2,#arg3,#arg4,#arg5);\
|
|
}
|
|
|
|
#define DECLARESTATIC_6(classe,ret,method,arg1,arg2,arg3,arg4,arg5,arg6) { \
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4,arg5,arg6); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,6,#ret,#arg1,#arg2,#arg3,#arg4,#arg5,#arg6);\
|
|
}
|
|
|
|
#define DECLARESTATIC_7(classe,ret,method,arg1,arg2,arg3,arg4,arg5,arg6,arg7) { \
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4,arg5,arg6,arg7); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,7,#ret,#arg1,#arg2,#arg3,#arg4,#arg5,#arg6,#arg7);\
|
|
}
|
|
|
|
#define DECLARESTATIC_8(classe,ret,method,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) { \
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,8,#ret,#arg1,#arg2,#arg3,#arg4,#arg5,#arg6,#arg7,#arg8);\
|
|
}
|
|
|
|
#define DECLARESTATIC_9(classe,ret,method,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8, arg9) { \
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,9,#ret,#arg1,#arg2,#arg3,#arg4,#arg5,#arg6,#arg7,#arg8,#arg9);\
|
|
}
|
|
|
|
// With Default Values
|
|
|
|
#define DECLARESTATIC_1_WITH_DEF_VALS(classe,ret,method,arg1,defVal1) { \
|
|
typedef ret (*fptr)(arg1); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,1,#ret,#arg1#defVal1);\
|
|
}
|
|
|
|
#define DECLARESTATIC_2_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2) { \
|
|
typedef ret (*fptr)(arg1,arg2); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,2,#ret,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2);\
|
|
}
|
|
|
|
#define DECLARESTATIC_3_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3) { \
|
|
typedef ret (*fptr)(arg1,arg2,arg3); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,3,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3);\
|
|
}
|
|
|
|
#define DECLARESTATIC_4_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4) { \
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,4,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4);\
|
|
}
|
|
|
|
#define DECLARESTATIC_5_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5) { \
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4,arg5); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,5,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5);\
|
|
}
|
|
|
|
#define DECLARESTATIC_6_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6) { \
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4,arg5,arg6); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,6,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5,#arg6" = "#defVal6);\
|
|
}
|
|
|
|
#define DECLARESTATIC_7_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,arg7,defVal7) { \
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4,arg5,arg6,arg7); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,7,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5,#arg6" = "#defVal6,#arg7" = "#defVal7);\
|
|
}
|
|
|
|
#define DECLARESTATIC_8_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,arg7,defVal7,arg8,defVal8) { \
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,8,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5,#arg6" = "#defVal6,#arg7" = "#defVal7,#arg8" = "#defVal8);\
|
|
}
|
|
|
|
#define DECLARESTATIC_9_WITH_DEF_VALS(classe,ret,method,arg1,defVal1,arg2,defVal2,arg3,defVal3,arg4,defVal4,arg5,defVal5,arg6,defVal6,arg7,defVal7,arg8,defVal8,arg9,defVal9) { \
|
|
typedef ret (*fptr)(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9); \
|
|
fptr var = (fptr)(&classe::method); \
|
|
TPtrToRoutine ptr; \
|
|
ptr.CreateFunctionPtr((void**) &var); \
|
|
VSLM->RegisterMethod(#classe,#method,TRUE,FALSE,ptr,VCALLTYPE_CDECL,9,#ret,#arg1" = "#defVal1,#arg2" = "#defVal2,#arg3" = "#defVal3,#arg4" = "#defVal4,#arg5" = "#defVal5,#arg6" = "#defVal6,#arg7" = "#defVal7,#arg8" = "#defVal8,#arg9" = "#defVal9);\
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
// Enum for array of GUID used by binded function GetGUID
|
|
|
|
enum PGUID
|
|
{
|
|
PGUID_NONE = 0,
|
|
PGUID_VOIDBUF,
|
|
PGUID_FLOAT,
|
|
PGUID_ANGLE,
|
|
PGUID_PERCENTAGE,
|
|
PGUID_INT,
|
|
PGUID_KEY,
|
|
PGUID_BOOL,
|
|
PGUID_STRING,
|
|
PGUID_RECT,
|
|
PGUID_VECTOR,
|
|
PGUID_2DVECTOR,
|
|
PGUID_QUATERNION,
|
|
PGUID_EULERANGLES,
|
|
PGUID_MATRIX,
|
|
PGUID_COLOR,
|
|
PGUID_BOX,
|
|
PGUID_OBJECTARRAY,
|
|
PGUID_OBJECT,
|
|
PGUID_BEOBJECT,
|
|
PGUID_MESH,
|
|
PGUID_MATERIAL,
|
|
PGUID_TEXTURE,
|
|
PGUID_SPRITE,
|
|
PGUID_3DENTITY,
|
|
PGUID_CURVEPOINT,
|
|
PGUID_LIGHT,
|
|
PGUID_TARGETLIGHT,
|
|
PGUID_ID,
|
|
PGUID_CAMERA,
|
|
PGUID_TARGETCAMERA,
|
|
PGUID_SPRITE3D,
|
|
PGUID_OBJECT3D,
|
|
PGUID_BODYPART,
|
|
PGUID_CHARACTER,
|
|
PGUID_CURVE,
|
|
PGUID_2DCURVE,
|
|
PGUID_LEVEL,
|
|
PGUID_PLACE,
|
|
PGUID_GROUP,
|
|
PGUID_2DENTITY,
|
|
PGUID_RENDEROBJECT,
|
|
PGUID_SPRITETEXT,
|
|
PGUID_SOUND,
|
|
PGUID_WAVESOUND,
|
|
PGUID_MIDISOUND,
|
|
PGUID_OBJECTANIMATION,
|
|
PGUID_ANIMATION,
|
|
PGUID_KINEMATICCHAIN,
|
|
PGUID_SCENE,
|
|
PGUID_BEHAVIOR,
|
|
PGUID_MESSAGE,
|
|
PGUID_SYNCHRO,
|
|
PGUID_CRITICALSECTION,
|
|
PGUID_STATE,
|
|
PGUID_ATTRIBUTE,
|
|
PGUID_CLASSID,
|
|
PGUID_DIRECTION,
|
|
PGUID_BLENDMODE,
|
|
PGUID_FILTERMODE,
|
|
PGUID_BLENDFACTOR,
|
|
PGUID_FILLMODE,
|
|
PGUID_LITMODE,
|
|
PGUID_SHADEMODE,
|
|
PGUID_GLOBALEXMODE,
|
|
PGUID_ZFUNC,
|
|
PGUID_ADDRESSMODE,
|
|
PGUID_WRAPMODE,
|
|
PGUID_3DSPRITEMODE,
|
|
PGUID_FOGMODE,
|
|
PGUID_LIGHTTYPE,
|
|
PGUID_SPRITEALIGN,
|
|
PGUID_SCRIPT,
|
|
PGUID_LAYERTYPE,
|
|
PGUID_STATECHUNK,
|
|
PGUID_DATAARRAY,
|
|
PGUID_COMPOPERATOR,
|
|
PGUID_BINARYOPERATOR,
|
|
PGUID_SETOPERATOR,
|
|
PGUID_SPRITETEXTALIGNMENT,
|
|
PGUID_OBSTACLEPRECISION,
|
|
PGUID_OBSTACLEPRECISIONBEH,
|
|
PGUID_OBSTACLE,
|
|
PGUID_PATCHMESH,
|
|
PGUID_POINTER,
|
|
PGUID_ENUMS,
|
|
PGUID_STRUCTS,
|
|
PGUID_FLAGS,
|
|
PGUID_FILTER,
|
|
PGUID_TIME,
|
|
PGUID_OLDTIME,
|
|
PGUID_COPYDEPENDENCIES,
|
|
PGUID_DELETEDEPENDENCIES,
|
|
PGUID_SAVEDEPENDENCIES,
|
|
PGUID_REPLACEDEPENDENCIES,
|
|
PGUID_SCENEACTIVITYFLAGS,
|
|
PGUID_SCENEOBJECT,
|
|
PGUID_SCENERESETFLAGS,
|
|
PGUID_ARRAYTYPE,
|
|
PGUID_RENDEROPTIONS,
|
|
PGUID_PARAMETERTYPE,
|
|
PGUID_MATERIALEFFECT,
|
|
PGUID_TEXGENEFFECT,
|
|
PGUID_TEXGENREFEFFECT,
|
|
PGUID_COMBINE2TEX,
|
|
PGUID_COMBINE3TEX,
|
|
PGUID_BUMPMAPPARAM,
|
|
PGUID_TEXCOMBINE,
|
|
PGUID_PIXELFORMAT,
|
|
PGUID_AXIS,
|
|
PGUID_SUPPORT,
|
|
PGUID_BITMAP_SYSTEMCACHING,
|
|
PGUID_OLDMESSAGE,
|
|
PGUID_OLDATTRIBUTE,
|
|
PGUID_3DPOINTCLOUD,
|
|
PGUID_VIDEO,
|
|
PGUID_RTVIEW,
|
|
|
|
PGUID_LASTGUID // must stay in last position
|
|
};
|