		#region Method #{MethodName}

		[DllImport(DllName.m_dllName, CallingConvention = CallingConvention.Cdecl)]
        #{ReturnValueMarshalAs}
		private static extern #{ReturnTypeName} Export#{ThisName}_#{MethodName}_#{ValueName1}_#{ValueName2}_#{ValueName3}_#{ValueName4}(IntPtr _native,
			#{ValueMarshalAs1}#{ValueTypePrefix1}#{ValueTypeName1} #{ValueName1},
			#{ValueMarshalAs2}#{ValueTypePrefix2}#{ValueTypeName2} #{ValueName2},
			#{ValueMarshalAs3}#{ValueTypePrefix3}#{ValueTypeName3} #{ValueName3},
			#{ValueMarshalAs4}#{ValueTypePrefix4}#{ValueTypeName4} #{ValueName4});

		public #{TypeName} #{MethodName}(
			#{TypeName1} #{ValueName1},
			#{TypeName2} #{ValueName2},
			#{TypeName3} #{ValueName3},
			#{TypeName4} #{ValueName4})
		{
			return #{ReturnConvertBefore}Export#{ThisName}_#{MethodName}_#{ValueName1}_#{ValueName2}_#{ValueName3}_#{ValueName4}(Native,
				#{ConvertBefore1}#{ValueTypePrefix1}#{ValueName1}#{ConvertPost1},
				#{ConvertBefore2}#{ValueTypePrefix2}#{ValueName2}#{ConvertPost2},
				#{ConvertBefore3}#{ValueTypePrefix3}#{ValueName3}#{ConvertPost3},
				#{ConvertBefore4}#{ValueTypePrefix4}#{ValueName4}#{ConvertPost4})#{ReturnConvertPost};
		}

		[DllImport(DllName.m_dllName, CallingConvention = CallingConvention.Cdecl)]
        #{ReturnValueMarshalAs}
		private static extern #{ReturnTypeName} Export#{ThisName}_#{MethodName}_#{ValueName1}_#{ValueName2}_#{ValueName3}(IntPtr _native,
			#{ValueMarshalAs1}#{ValueTypePrefix1}#{ValueTypeName1} #{ValueName1},
			#{ValueMarshalAs2}#{ValueTypePrefix2}#{ValueTypeName2} #{ValueName2},
			#{ValueMarshalAs3}#{ValueTypePrefix3}#{ValueTypeName3} #{ValueName3});

		public #{TypeName} #{MethodName}(
			#{TypeName1} #{ValueName1},
			#{TypeName2} #{ValueName2},
			#{TypeName3} #{ValueName3})
		{
			return #{ReturnConvertBefore}Export#{ThisName}_#{MethodName}_#{ValueName1}_#{ValueName2}_#{ValueName3}(Native,
				#{ConvertBefore1}#{ValueTypePrefix1}#{ValueName1}#{ConvertPost1},
				#{ConvertBefore2}#{ValueTypePrefix2}#{ValueName2}#{ConvertPost2},
				#{ConvertBefore3}#{ValueTypePrefix3}#{ValueName3}#{ConvertPost3})#{ReturnConvertPost};
		}

		[DllImport(DllName.m_dllName, CallingConvention = CallingConvention.Cdecl)]
        #{ReturnValueMarshalAs}
		private static extern #{ReturnTypeName} Export#{ThisName}_#{MethodName}_#{ValueName1}_#{ValueName2}(IntPtr _native,
			#{ValueMarshalAs1}#{ValueTypePrefix1}#{ValueTypeName1} #{ValueName1},
			#{ValueMarshalAs2}#{ValueTypePrefix2}#{ValueTypeName2} #{ValueName2});

		public #{TypeName} #{MethodName}(
			#{TypeName1} #{ValueName1},
			#{TypeName2} #{ValueName2})
		{
			return #{ReturnConvertBefore}Export#{ThisName}_#{MethodName}_#{ValueName1}_#{ValueName2}(Native,
				#{ConvertBefore1}#{ValueTypePrefix1}#{ValueName1}#{ConvertPost1},
				#{ConvertBefore2}#{ValueTypePrefix2}#{ValueName2}#{ConvertPost2})#{ReturnConvertPost};
		}
		
		[DllImport(DllName.m_dllName, CallingConvention = CallingConvention.Cdecl)]
        #{ReturnValueMarshalAs}
		private static extern #{ReturnTypeName} Export#{ThisName}_#{MethodName}_#{ValueName1}(IntPtr _native,
			#{ValueMarshalAs1}#{ValueTypePrefix1}#{ValueTypeName1} #{ValueName1});

		public #{TypeName} #{MethodName}(
			#{TypeName1} #{ValueName1})
		{
			return #{ReturnConvertBefore}Export#{ThisName}_#{MethodName}_#{ValueName1}(Native,
				#{ConvertBefore1}#{ValueTypePrefix1}#{ValueName1}#{ConvertPost1})#{ReturnConvertPost};
		}
		
		#endregion
