diff --git a/src/Generator/Generators/CLI/CLISourcesTemplate.cs b/src/Generator/Generators/CLI/CLISourcesTemplate.cs index 73442dbe..51d24980 100644 --- a/src/Generator/Generators/CLI/CLISourcesTemplate.cs +++ b/src/Generator/Generators/CLI/CLISourcesTemplate.cs @@ -270,6 +270,16 @@ namespace Cxxi.Generators.CLI } } + private static bool IsInstanceFunction(Function function) + { + var isInstanceFunction = false; + + var method = function as Method; + if (method != null) + isInstanceFunction = method.Conversion == MethodConversionType.None; + return isInstanceFunction; + } + public struct ParamMarshal { public string Name; @@ -280,6 +290,8 @@ namespace Cxxi.Generators.CLI { var @params = new List(); + var method = function as Method; + // Do marshaling of parameters for (var i = 0; i < function.Parameters.Count; ++i) { @@ -292,8 +304,18 @@ namespace Cxxi.Generators.CLI else { var argName = "arg" + i.ToString(CultureInfo.InvariantCulture); - var ctx = new MarshalContext() { Parameter = param, ArgName = argName }; - var marshal = new CLIMarshalManagedToNativePrinter(Generator, ctx); + + var ctx = new MarshalContext() + { + Parameter = param, + ParameterIndex = i, + ArgName = argName, + Function = function + }; + + var marshal = new CLIMarshalManagedToNativePrinter(Generator.TypeMapDatabase, + ctx); + param.Visit(marshal); if (string.IsNullOrEmpty(marshal.Return)) diff --git a/src/Generator/Types/TypeMap.cs b/src/Generator/Types/TypeMap.cs index a0ecee67..a215569b 100644 --- a/src/Generator/Types/TypeMap.cs +++ b/src/Generator/Types/TypeMap.cs @@ -10,6 +10,8 @@ namespace Cxxi.Types public string ReturnVarName { get; set; } public Type ReturnType { get; set; } public Parameter Parameter { get; set; } + public int ParameterIndex { get; set; } + public Function Function { get; set; } } [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]