in SharpGen/Transform/MethodTransform.cs [119:159]
private void ProcessMethod(CsCallable method)
{
var cppMethod = (CppCallable)method.CppElement;
// For methods, the tag "type" is only used for return type
// So we are overriding the return type here
var methodRule = cppMethod.Rule;
if (methodRule.MappingType != null)
cppMethod.ReturnValue.Rule.MappingType = methodRule.MappingType;
// Get the inferred return type
method.ReturnValue = factory.Create(cppMethod.ReturnValue);
var parameters = cppMethod.Parameters.ToArray();
var parameterNames = NamingRules.Rename(parameters);
Debug.Assert(parameters.Length == parameterNames.Count);
uint? outCount = 0;
// Iterates on parameters to convert them to C# parameters
for (var index = 0; index < parameters.Length; index++)
{
var cppParameter = parameters[index];
var parameterName = parameterNames[index];
var csParameter = factory.Create(cppParameter, parameterName);
method.Add(csParameter);
if (!outCount.HasValue)
continue;
if (csParameter.IsOut && csParameter.Relations.Count == 0)
++outCount;
if (cppParameter.Rule.ParameterUsedAsReturnType == false)
outCount = null;
}
if (outCount == 1)
TransformOutParametersToReturnValues(method);
}