internal static unsafe IntPtr MakeThunk(ThunkKind thunkKind, IntPtr targetPointer, IntPtr instantiatingArg, ArgIteratorData argIteratorData, bool[] paramsByRefForced)
 {
     int callConversionInfo = CallConversionInfo.RegisterCallConversionInfo(thunkKind, targetPointer, instantiatingArg, argIteratorData, paramsByRefForced);
     return FindExistingOrAllocateThunk(callConversionInfo);
 }
 //public:
 //------------------------------------------------------------
 // Constructor
 //------------------------------------------------------------
 public ArgIterator(ArgIteratorData argData, CallingConvention callConv, bool hasParamType, bool extraFunctionPointerArg, bool[] forcedByRefParams, bool skipFirstArg, bool extraObjectFirstArg)
 {
     this = default(ArgIterator);
     _argData = argData;
     _hasThis = callConv == CallingConvention.ManagedInstance;
     _hasParamType = hasParamType;
     _extraFunctionPointerArg = extraFunctionPointerArg;
     _forcedByRefParams = forcedByRefParams;
     _skipFirstArg = skipFirstArg;
     _extraObjectFirstArg = extraObjectFirstArg;
     _interpreterCallingConvention = callConv;
 }